Editor/Data/ArchArchetypeSteps.cs
namespace Sunless.Architecture;
public readonly record struct ArchArchetypeStepContext(
ArchPlan Plan,
ArchBuilding Building,
ArchKit Kit,
ArchArchetypeStep Step,
Vector2 Min,
Vector2 Max,
ArchRoom Room,
List<string> Skipped );
public interface IArchArchetypeStepBuilder {
ArchStepKind Kind { get; }
string Build( ArchArchetypeStepContext context );
}
public sealed class ArchArchetypeSteps : ArchTable<ArchArchetypeSteps, ArchStepKind, IArchArchetypeStepBuilder> {
protected override IEnumerable<IArchArchetypeStepBuilder> Standing() {
yield return new ArchPorchArchetypeStep();
}
protected override ArchStepKind KeyOf( IArchArchetypeStepBuilder builder ) => builder.Kind;
protected override string Collision( IArchArchetypeStepBuilder standing, IArchArchetypeStepBuilder builder ) {
return $"{builder.Kind} is built by both {standing.GetType().Name} and {builder.GetType().Name}";
}
public IArchArchetypeStepBuilder For( ArchStepKind kind ) => Held( kind );
}