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