Editor/Geometry/ArchStairAxes.cs

A small readonly struct used by the Editor to represent stair axes in 2D/3D. It stores an origin and yaw, computes a forward (Along) vector from yaw, provides an Across perpendicular, and helper methods to get flat 2D points, 3D points and a rectangular loop of 2D corners.

namespace Sunless.Architecture;

public readonly struct ArchStairAxes
{
	public Vector2 Origin { get; init; }
	public float Yaw { get; init; }

	public Vector2 Along => new( MathF.Cos( Yaw.DegreeToRadian() ), MathF.Sin( Yaw.DegreeToRadian() ) );

	public Vector2 Across
	{
		get
		{
			var along = Along;

			return new Vector2( -along.y, along.x );
		}
	}

	public Vector2 Flat( float along, float across ) => Origin + Along * along + Across * across;

	public Vector3 Point( float along, float across, float height )
	{
		var flat = Flat( along, across );

		return new Vector3( flat.x, flat.y, height );
	}

	public List<Vector2> Rect( float alongFrom, float alongTo, float acrossFrom, float acrossTo ) => new()
	{
		Flat( alongFrom, acrossFrom ),
		Flat( alongTo, acrossFrom ),
		Flat( alongTo, acrossTo ),
		Flat( alongFrom, acrossTo )
	};
}