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;
		}
	}
}