Editor/Platform/ArchPlatformManifest.cs
using System;
using System.Collections.Generic;
using System.Linq;
using Sandbox;

namespace Sunless.Architecture;

public sealed class ArchPlatformManifest : ArchKindManifest<ArchPlatformPart> {
	public override ArchKind Kind => ArchKind.Platform;

	public override string Slot => "Platforms";

	public override IEnumerable<Type> Hosts => new[] { typeof( ArchBuilding ) };

	public override string Label => "Platform";

	public override string Glyph => "crop_landscape";

	public override string Subtool => ArchSubtools.Bool;

	public override string HostOutput => "Platform body and deck";

	public override IEnumerable<ArchKind> Children => new[]
	{
		ArchKind.CarvedStair, ArchKind.Trim, ArchKind.Pillar
	};

	public override int DirectRank => 15;

	public override ArchLayerStage Stage( object payload ) => ArchLayerStage.Shape;

	public override IReadOnlyList<List<Vector2>> Loops( object payload ) {
		return payload is ArchPlatformPart platform
			? new List<List<Vector2>> { platform.Outline() }
			: base.Loops( payload );
	}

	public override float Height( object payload, float fallback ) {
		return payload is ArchPlatformPart platform ? platform.TopHeight : fallback;
	}
}