Editor/Pipe/ArchPipeHandlers.cs
namespace Sunless.Architecture;
public sealed class ArchPipeHandler : IArchHandler {
public ArchKind Kind => ArchKind.Pipe;
public bool Draw( ArchTool tool, ArchSelection picked ) {
if ( picked.Item is not ArchPipePart run ) {
return false;
}
var gesture = ArchGesture.On( ArchKind.Pipe, run.Id );
var changed = false;
foreach ( var node in run.Nodes ) {
if ( !ArchShapeHandles.Control( tool, gesture.At( "node", node.Id ), node.Position, out var position ) ) {
continue;
}
foreach ( var shared in ArchPipe.All( tool.Plan ).SelectMany( candidate => candidate.Nodes ).Where( candidate => candidate.Id == node.Id ) ) {
shared.Position = position;
}
changed = true;
}
return changed;
}
}
public sealed class ArchBracketHandler : IArchHandler {
public ArchKind Kind => ArchKind.Bracket;
public bool Draw( ArchTool tool, ArchSelection picked ) {
if ( picked.Item is not ArchPipeBracketPart bracket ) {
return false;
}
if ( !ArchShapeHandles.Volume( tool, ArchGesture.On( ArchKind.Bracket, bracket.Id ).At( "volume" ), bracket.Min, bracket.Max, bracket.BaseHeight, bracket.TopHeight, out var pulled ) ) {
return false;
}
bracket.Reshape( pulled );
return true;
}
}