Editor/Road/ArchRoadNetwork.cs
namespace Sunless.Architecture;

public sealed class ArchRoadNetwork : IArchRoadNetwork {
	public IReadOnlyList<ArchRoadJunction> Junctions( ArchPlan plan, ArchKit kit ) {
		return ArchJunction.Derived( plan, kit ).Select( junction => new ArchRoadJunction(
			NameOf( junction ), junction, Extent( junction ) ) ).ToList();
	}

	public static string NameOf( ArchJunctionNode junction ) {
		var roads = junction.Legs.Select( leg => leg.Road.Id ).Distinct().OrderBy( id => id );

		return $"Junction_{string.Join( "_", roads )}";
	}

	static ArchExtent Extent( ArchJunctionNode junction ) {
		var extent = new ArchExtent();

		foreach ( var leg in junction.Legs ) {
			var position = leg.Frame().Position;
			extent.Add( new Vector2( position.x, position.y ), position.z - leg.Reach, position.z + leg.Reach );
		}

		return extent;
	}
}