Editor/Roof/ArchRoofAnswers.cs
namespace Sunless.Architecture;

public sealed class ArchRoofHeadroom : IArchHeadroom {
	public bool Over( ArchPlan plan, ArchKit kit, int level, IReadOnlyList<Vector2> footprint, out float top ) {
		top = 0f;

		var found = false;

		foreach ( var building in plan.Buildings ) {
			foreach ( var roof in building.Roofs.Where( roof => roof.Level >= level ) ) {
				if ( !ArchFootprint.Overlaps( roof.Outline(), footprint ) ) {
					continue;
				}

				var peak = ArchRoofPlane.Peak( roof ) + (roof.Thickness > 0f ? roof.Thickness : kit.RoofThickness);

				top = found ? MathF.Max( top, peak ) : peak;
				found = true;
			}
		}

		return found;
	}
}