Editor UI/report helper for roof parts. It implements IArchExpectedReport and returns a serializable anonymous object describing an ArchRoofPart, its properties, gutter runs and some building/kit-derived values for previewing or reporting in the editor.
using System.Linq;
using Sandbox;
namespace Sunless.Architecture;
public sealed class ArchRoofExpectedReport : IArchExpectedReport
{
public ArchKind Kind => ArchKind.Roof;
public object Describe( object payload, ArchTarget target, ArchTool tool )
{
if ( payload is not ArchRoofPart roof || target.Building is null )
{
return null;
}
var building = target.Building;
var kit = tool.Kit;
var runs = ArchRoofGen.GutterRuns( roof, building, kit, tool.Plan );
return new
{
roof.Name,
Style = roof.Style.ToString(),
roof.Level,
roof.BaseHeight,
roof.Pitch,
roof.Overhang,
roof.RidgeAlongX,
roof.Fascia,
roof.Soffit,
roof.Gutters,
roof.Parapet,
roof.Ceiling,
roof.EndWalls,
building.GuttersEnabled,
FasciaDepth = ArchProfiles.FasciaDepth( kit ),
Corners = roof.Outline().Count,
GutterRuns = runs.Select( run => new
{
Loop = run.Closed,
Points = run.Points.Count,
From = Say( run.Raised().First() ),
To = Say( run.Raised().Last() ),
run.Length
} ).ToList()
};
}
static string Say( Vector3 point ) => $"{point.x:0.#},{point.y:0.#},{point.z:0.#}";
}