Code/PolygonMeshBuilder.Edge.cs
namespace Sandbox.Polygons;
partial class PolygonMeshBuilder
{
private struct Edge
{
public int Index { get; }
public Vector2 Origin { get; }
public Vector2 Tangent { get; }
public Vector2 Normal { get; }
public Vector2 Velocity { get; set; }
public int PrevEdge { get; set; }
public int NextEdge { get; set; }
public float Distance { get; set; }
public float MaxDistance { get; set; }
public (int Prev, int Next) Vertices { get; set; }
public int Twin { get; }
public Edge( int index, Vector2 origin, Vector2 tangent, float distance, int twin = -1 )
{
Index = index;
Origin = origin;
Tangent = tangent;
Normal = Helpers.Rotate90( tangent );
Velocity = Vector2.Zero;
PrevEdge = -1;
NextEdge = -1;
Vertices = (-1, -1);
Distance = distance;
MaxDistance = float.PositiveInfinity;
Twin = twin;
}
public readonly Vector2 Project( float distance )
{
return Origin + Velocity * (distance - Distance);
}
public override string ToString()
{
return $"{(char) ('A' + Index)}";
}
public bool Equals( Edge other )
{
return Index == other.Index;
}
public override bool Equals( object obj )
{
return obj is Edge other && Equals( other );
}
public override int GetHashCode()
{
return Index;
}
}
}