Editor/Roof/ArchRoofExpectedReport.cs
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.#}";
}