Editor/Pipe/ArchBracketManifest.cs

A manifest class for bracket pipe parts in the editor. It declares kind, slot, hosts, label, glyph, subtool, and stage metadata and provides a Wide method that returns all bracket parts across buildings in a plan.

Reflection
using System;
using System.Collections.Generic;
using System.Linq;

namespace Sunless.Architecture;

public sealed class ArchBracketManifest : ArchKindManifest<ArchPipeBracketPart>, IArchReachesWide
{
	public override ArchKind Kind => ArchKind.Bracket;

	public override string Slot => "Brackets";

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

	public override string Label => "Brackets";

	public override string Glyph => ArchIcons.Get( "subtool_bracket", "build" );

	public override string Subtool => ArchSubtools.Bracket;

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

	// A hanger is sized off the runs it overlaps, so it moves whenever they do.
	public IEnumerable<object> Wide( ArchPlan plan )
	{
		return plan?.Buildings.SelectMany( building => building.Brackets ) ?? Array.Empty<ArchPipeBracketPart>();
	}
}