Editor/Pillar/ArchPillarExtentProvider.cs
namespace Sunless.Architecture;

public sealed class ArchPillarExtentProvider : IArchExtentProvider {
	public ArchKind Kind => ArchKind.Pillar;

	public ArchExtent Measure( object payload, ArchExtentContext context ) {
		if ( payload is not ArchPillarPart pillar ) {
			return new ArchExtent();
		}

		var extent = new ArchExtent();
		var foot = ArchPillarGen.Seat( pillar, context.Kit, context.Plan );
		var height = ArchPillarGen.Height( pillar, context.Room, context.Kit, context.Plan );
		var radians = pillar.Yaw.DegreeToRadian();
		var along = new Vector2( MathF.Cos( radians ), MathF.Sin( radians ) );
		var across = new Vector2( -along.y, along.x );
		var spanX = MathF.Max( 0f, pillar.CountX - 1 ) * pillar.Spacing.x;
		var spanY = MathF.Max( 0f, pillar.CountY - 1 ) * pillar.Spacing.y;
		var origin = pillar.Origin;

		foreach ( var corner in new[]
		{
			origin,
			origin + along * spanX,
			origin + along * spanX + across * spanY,
			origin + across * spanY
		} ) {
			extent.Add( corner, foot, foot + height );
		}

		return extent.Grown( 24f );
	}
}