Editor/Pipe/ArchPipeExtentProviders.cs
namespace Sunless.Architecture;

public sealed class ArchPipeExtentProvider : IArchExtentProvider {
	public ArchKind Kind => ArchKind.Pipe;

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

		var extent = new ArchExtent();

		foreach ( var point in ArchPipeShape.Resolve( context.Plan, run ).Path() ) {
			extent.Add( point );
		}

		return extent.Grown( MathF.Max( 2f, run.Radius ) );
	}
}

public sealed class ArchBracketExtentProvider : IArchExtentProvider {
	public ArchKind Kind => ArchKind.Bracket;

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

		var extent = new ArchExtent();

		foreach ( var corner in bracket.Outline() ) {
			extent.Add( corner, bracket.BaseHeight, bracket.TopHeight );
		}

		return extent.Grown( MathF.Max( 2f, bracket.MemberWidth ) );
	}
}