Editor provider that measures the 3D extent of an architecture pillar part. It computes pillar footprint from count, spacing, orientation and base/height and returns a grown bounding extent.
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 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, pillar.BaseHeight, pillar.BaseHeight + height );
}
return extent.Grown( 24f );
}
}