Editor/Output/ArchDoorFitters.cs
using System.Collections.Generic;
using Sandbox;
using MapDoor = Sandbox.Mapping.Door;
namespace Sunless.Architecture;
// The tool stands the engine door and can never name a game's runtime type, so the game hangs its own half here.
public interface IArchDoorFitter {
void Fit( GameObject node, MapDoor door );
}
// Never cached across builds, for the reason ArchDrawers is not: hotload carries statics over.
public sealed class ArchDoorFitters {
readonly List<IArchDoorFitter> fitters = new();
// Nothing enrolled is the tool standing without a game around it - the door still swings, for nobody.
public static ArchDoorFitters None => new();
public static ArchDoorFitters Load() {
var built = new ArchDoorFitters();
foreach ( var fitter in ArchDiscovery.Enrolled<IArchDoorFitter>() ) {
built.fitters.Add( fitter );
}
return built;
}
public int Count => fitters.Count;
public void Fit( GameObject node, MapDoor door ) {
foreach ( var fitter in fitters ) {
fitter.Fit( node, door );
}
}
}