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 )
};
}