Editor-side service for an ArchRoadPart that queries attached bridge and tunnel parts. Provides methods to find a bridge or tunnel covering a given distance and to enumerate the station positions (From and To) of valid bridges and tunnels.
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;
}
}
}