Editor/Handles/ArchHandlers.cs
namespace Sunless.Architecture;
public interface IArchHandler {
ArchKind Kind { get; }
bool Draw( ArchTool tool, ArchSelection picked );
}
public sealed class ArchHandlers : ArchTable<ArchHandlers, ArchKind, IArchHandler> {
protected override IEnumerable<IArchHandler> Standing() {
yield return new ArchStairHandler();
yield return new ArchStairStepHandler();
yield return new ArchCarvedStairHandler();
yield return new ArchExteriorStairHandler();
yield return new ArchPillarHandler();
yield return new ArchSpanHandler();
yield return new ArchPipeHandler();
yield return new ArchBracketHandler();
yield return new ArchPorchHandler();
yield return new ArchWalkwayHandler();
yield return new ArchBridgeHandler();
yield return new ArchTunnelHandler();
}
protected override ArchKind KeyOf( IArchHandler handler ) => handler.Kind;
protected override bool Accepts( IArchHandler handler ) => handler.Kind.Known;
protected override string Collision( IArchHandler standing, IArchHandler handler ) {
return $"{handler.Kind.Ident} is handled by both {standing.GetType().Name} and {handler.GetType().Name}";
}
public IArchHandler For( ArchKind kind ) => Held( kind );
public ArchHandlers Except( ArchKind kind ) => Without( kind );
}