Editor/Road/ArchRoadAttachmentService.cs
using System;
using System.Collections.Generic;
using Sandbox;
namespace Sunless.Architecture;
public sealed class ArchRoadAttachmentService {
readonly ArchRoadPart road;
public ArchRoadAttachmentService( ArchRoadPart road ) {
this.road = road;
}
public ArchBridgePart BridgeAt( float distance ) {
foreach ( var bridge in road.Bridges ) {
if ( bridge.Length >= ArchBridge.ShortestSpan && bridge.Carries( distance ) ) {
return bridge;
}
}
return null;
}
public ArchTunnelPart TunnelAt( float distance ) {
foreach ( var tunnel in road.Tunnels ) {
if ( tunnel.Length >= ArchTunnel.ShortestBore && tunnel.Carries( distance ) ) {
return tunnel;
}
}
return null;
}
public IEnumerable<float> BridgeStations() {
foreach ( var bridge in road.Bridges ) {
if ( bridge.Length < ArchBridge.ShortestSpan ) {
continue;
}
yield return bridge.From;
yield return bridge.To;
}
}
public IEnumerable<float> TunnelStations() {
foreach ( var tunnel in road.Tunnels ) {
if ( tunnel.Length < ArchTunnel.ShortestBore ) {
continue;
}
yield return tunnel.From;
yield return tunnel.To;
}
}
}