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 );
}