Editor/Cabinet/ArchCabinetManifest.cs
using System;
using System.Collections.Generic;
using Sandbox;
namespace Sunless.Architecture;
public sealed class ArchCabinetManifest : ArchKindManifest<ArchCabinetPart> {
public override ArchKind Kind => ArchKind.Cabinet;
public override string Slot => "Cabinets";
public override IEnumerable<Type> Hosts => new[] { typeof( ArchRoom ) };
public override string Label => "Cabinets";
public override string Glyph => "kitchen";
public override string Subtool => ArchSubtools.Cabinet;
public override int DirectRank => 10;
public override ArchLayerStage Stage( object payload ) => ArchLayerStage.Fixture;
public override IReadOnlyList<List<Vector2>> Loops( object payload ) {
if ( payload is not ArchCabinetPart part ) {
return Array.Empty<List<Vector2>>();
}
var reach = part.Facing * part.Reach;
return new List<List<Vector2>>
{
new() { part.Start, part.End, part.End + reach, part.Start + reach }
};
}
// Asked with no kit to reach the type through, so the TIER answers for the datum a wall unit would have read off
// the counter below it - or every hanging run's outline is drawn lying on the floor.
public override float Height( object payload, float fallback ) {
if ( payload is not ArchCabinetPart part ) {
return fallback;
}
if ( part.BaseHeight > 0.01f ) {
return part.BaseHeight;
}
return part.Tier == CabinetTier.Hanging ? fallback + ArchCabinetShape.HungDatum : fallback;
}
}