Editor/Stair/ArchStairGuardSheet.cs
using System;
using Editor;
namespace Sunless.Architecture;
public sealed class ArchStairGuardSheet : IArchSheet {
public Type Payload => typeof( ArchStairGuardPart );
public void Build( ToolSidebarWidget panel, ArchTool tool, ArchSelection picked, Action refresh, Action changed ) {
if ( picked.Item is not ArchStairGuardPart guard ) {
return;
}
using ( var edges = ArchIconGrid.In( panel.AddGroup( "Edge" ) ) ) {
edges.Pick( "Left going up", "guard_left", "align_horizontal_left",
guard.Edge == StairEdge.Left, () => { guard.Edge = StairEdge.Left; refresh?.Invoke(); changed?.Invoke(); } );
edges.Pick( "Right going up", "guard_right", "align_horizontal_right",
guard.Edge == StairEdge.Right, () => { guard.Edge = StairEdge.Right; refresh?.Invoke(); changed?.Invoke(); } );
edges.Pick( "The head - the far end a turn leaves open", "guard_head", "vertical_align_top",
guard.Edge == StairEdge.Head, () => { guard.Edge = StairEdge.Head; refresh?.Invoke(); changed?.Invoke(); } );
}
using ( var kinds = ArchIconGrid.In( panel.AddGroup( "Railing" ) ) ) {
kinds.Pick( "Balustrade — newels, balusters and a handrail over them", "opt_rails", "fence",
guard.Railing == StairRailing.Balustrade, () => { guard.Railing = StairRailing.Balustrade; changed?.Invoke(); } );
kinds.Pick( "Handrail — bolted to the plaster, for a side that runs against a wall", "opt_wall_rail", "handyman",
guard.Railing == StairRailing.Handrail, () => { guard.Railing = StairRailing.Handrail; changed?.Invoke(); } );
}
panel.AddGroup( "Height" ).Add( ArchPartUi.Number( "Height", guard.Height, tool.Kit.HandrailHeight,
value => guard.Height = MathF.Max( 0f, value ), changed ) );
}
}