Editor/Geometry/ArchStairAxes.cs
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 )
	};
}