Editor/Platform/ArchHostCarvings.cs

Interface and static accessor for arch host carving logic. Defines IArchHostCarving with methods to produce mouth outlines and carve volumes, and ArchHostCarvings that resolves a single implementation via ArchRoles.One<T>() and forwards calls, returning empty enumerables if none.

namespace Sunless.Architecture;

public interface IArchHostCarving
{
	IEnumerable<List<Vector2>> Mouths( IArchCarveHost host, object payload, ArchBuilding building, ArchKit kit );

	IEnumerable<ArchCarveVolume> Volumes( IArchCarveHost host, object payload, ArchBuilding building, ArchKit kit );
}

public static class ArchHostCarvings
{
	static IArchHostCarving Load() => ArchRoles.One<IArchHostCarving>();

	public static IEnumerable<List<Vector2>> Mouths( IArchCarveHost host, object payload, ArchBuilding building, ArchKit kit )
	{
		return Load()?.Mouths( host, payload, building, kit ) ?? Enumerable.Empty<List<Vector2>>();
	}

	public static IEnumerable<ArchCarveVolume> Volumes( IArchCarveHost host, object payload, ArchBuilding building, ArchKit kit )
	{
		return Load()?.Volumes( host, payload, building, kit ) ?? Enumerable.Empty<ArchCarveVolume>();
	}
}