Editor/Span/ArchSpanDrawer.cs

Editor UI/renderer component for architecture spans. Implements IArchDrawer and draws an ArchSpanPart into the host canvas by resolving the span shape and invoking ArchSpanGen.Build with a brush chosen from span/room/building palettes.

File Access
namespace Sunless.Architecture;

public sealed class ArchSpanDrawer : IArchDrawer
{
	public string Draws => ArchDraws.Span;

	// The solid goes on the HOST canvas rather than into a named piece: a span is nothing but its span, and the
	// build cache reads a part whose host canvas came out empty as one that vanished.
	public void Draw( ArchDrawing drawing )
	{
		var span = drawing.Drawn<ArchSpanPart>();
		var room = drawing.Within<ArchRoom>();
		var building = drawing.Within<ArchBuilding>();

		if ( building is null || !ArchSpanShape.Resolve( drawing.Plan, drawing.Kit, room, span, out var run ) )
		{
			return;
		}

		var chain = new[] { span.Palette, room.Palette, building.Palette };

		ArchSpanGen.Build( drawing.Canvas, run, drawing.Style.Brush( ArchSurface.PillarCap, chain ) );
	}
}