Editor/Stair/ArchExteriorStairGen.cs
using System.Collections.Generic;
namespace Sunless.Architecture;
// The routing filed as named pieces: the legs come out of the stair engine, the landings out of the platform
// engine and the rails out of the barrier engine, so nothing about a tread, a slab or a baluster lives here.
public static class ArchExteriorStairGen {
public static void Build(
ArchMesh canvas,
ArchExteriorStairPart part,
ArchBuilding building,
ArchPlan plan,
ArchKit kit,
ArchStyle style,
List<ArchDoorRequest> doors ) {
var shape = ArchExteriorStair.Resolve( part, building, kit );
if ( !shape.IsUsable ) {
return;
}
using ( canvas.Part( ArchPieces.Flight ) ) {
foreach ( var flight in shape.Flights ) {
ArchStairGen.Build( canvas, flight.Stair, shape.Host, building, kit, style, doors, plan );
}
}
using ( canvas.Part( ArchPieces.Landings ) ) {
foreach ( var landing in shape.Landings ) {
ArchPlatformGen.Build( canvas, ArchExteriorStair.Slab( part, landing ), building, plan, kit, style );
}
}
if ( !part.Rail ) {
return;
}
using ( canvas.Part( ArchPieces.Rails ) ) {
Rails( canvas, shape, kit, ArchBarrierBrushes.Of( style, part.Palette, building.Palette ) );
}
}
// Follow on the rake, Level on a landing: the same engine, told which of the two the ground under it does.
static void Rails( ArchMesh canvas, ArchExteriorStairShape shape, ArchKit kit, ArchBarrierBrushes brushes ) {
foreach ( var flight in shape.Flights ) {
ArchFixtureGuard.Build( canvas, flight.Edge, kit, kit.HandrailHeight, BarrierGround.Follow, brushes );
}
foreach ( var landing in shape.Landings ) {
ArchFixtureGuard.Build( canvas, landing.Edge, kit, kit.HandrailHeight, BarrierGround.Level, brushes );
}
}
}