Editor/Pillar/ArchPillarTypes.cs

Editor-side static utility defining default architectural pillar types and their part properties. Returns a list of ArchPillarType objects (pier, post, column, stanchion) with dimensions, footing, span and UI metadata.

File Access
using System.Collections.Generic;
using Sandbox;

namespace Sunless.Architecture;

public static class ArchPillarTypes
{
	public static List<ArchPillarType> Defaults()
	{
		return new List<ArchPillarType> { Pier(), Post(), Column(), Stanchion() };
	}

	// A pier under a link is a blade - why pillars carry width and depth.
	static ArchPillarType Pier()
	{
		return new ArchPillarType
		{
			Name = "pier",
			Title = "Concrete pier",
			Description = "Plain rectangular shaft on a bevelled pad. Carries walkways, landings and upper storeys.",
			Icon = "view_column",
			Shows = new List<ArchPillarGroup> { ArchPillarGroup.Section, ArchPillarGroup.Footing, ArchPillarGroup.Span },
			Column = new ArchPillarPart
			{
				Width = 24f,
				Depth = 24f,
				Footing = PillarFooting.Bevelled,
				FootingSpread = 10f,
				FootingHeight = 12f,
				FootingBuried = 4f,
				Plinth = false,
				Capital = false,
				Spacing = new Vector2( 240f, 240f )
			}
		};
	}

	static ArchPillarType Post()
	{
		return new ArchPillarType
		{
			Name = "post",
			Title = "Veranda post",
			Description = "Slender square post standing on the deck, no footing, no capital.",
			Icon = "power_input",
			Shows = new List<ArchPillarGroup> { ArchPillarGroup.Section, ArchPillarGroup.Span },
			Column = new ArchPillarPart
			{
				Width = 7f,
				Depth = 7f,
				Footing = PillarFooting.None,
				Plinth = false,
				Capital = false,
				Spacing = new Vector2( 96f, 96f )
			}
		};
	}

	// The only place a plinth and capital read as anything but fuss - an arcade.
	static ArchPillarType Column()
	{
		return new ArchPillarType
		{
			Name = "column",
			Title = "Plastered column",
			Description = "Plinth and capital on a stepped base. For an arcade or a porch colonnade.",
			Icon = "account_balance",
			Column = new ArchPillarPart
			{
				Width = 16f,
				Depth = 16f,
				Footing = PillarFooting.Stepped,
				FootingSpread = 7f,
				FootingHeight = 9f,
				FootingBuried = 2f,
				Plinth = true,
				PlinthHeight = 10f,
				PlinthOversize = 3f,
				Capital = true,
				CapitalHeight = 8f,
				CapitalOversize = 3f,
				Span = PillarSpan.Arch,
				Spacing = new Vector2( 144f, 144f )
			}
		};
	}

	static ArchPillarType Stanchion()
	{
		return new ArchPillarType
		{
			Name = "stanchion",
			Title = "Steel stanchion",
			Description = "Narrow steel section on a square base plate, spanned by a beam. Clear-span sheds and factories.",
			Icon = "hardware",
			Shows = new List<ArchPillarGroup> { ArchPillarGroup.Section, ArchPillarGroup.Footing, ArchPillarGroup.Span },
			Column = new ArchPillarPart
			{
				Width = 12f,
				Depth = 16f,
				Footing = PillarFooting.Square,
				FootingSpread = 9f,
				FootingHeight = 4f,
				FootingBuried = 0f,
				Plinth = false,
				Capital = false,
				Span = PillarSpan.Beam,
				SpanDepth = 12f,
				SpanHeight = 20f,
				Spacing = new Vector2( 288f, 384f )
			}
		};
	}
}