swb_base/structures/AngPos.cs
namespace SWB.Base;

public struct AngPos
{
	[KeyProperty] public Angles Angle { get; set; } = Angles.Zero;
	[KeyProperty] public Vector3 Pos { get; set; } = Vector3.Zero;

	public static readonly AngPos Zero = new();

	public AngPos()
	{
	}

	public AngPos( Angles angle, Vector3 pos )
	{
		Angle = angle;
		Pos = pos;
	}

	public bool Equals( AngPos angPos )
	{
		return Angle == angPos.Angle && Pos == angPos.Pos;
	}

	public static AngPos operator +( AngPos x, AngPos y )
	{
		return new AngPos( x.Angle + y.Angle, x.Pos + y.Pos );
	}

	public static AngPos operator -( AngPos x, AngPos y )
	{
		return new AngPos( x.Angle - y.Angle, x.Pos - y.Pos );
	}

	public static AngPos operator -( AngPos x )
	{
		return new AngPos( x.Angle * -1, -x.Pos );
	}

	public static bool operator ==( AngPos x, AngPos y )
	{
		return x.Equals( y );
	}

	public static bool operator !=( AngPos x, AngPos y )
	{
		return !x.Equals( y );
	}

	public override bool Equals( object obj )
	{
		if ( obj is AngPos angPos )
			return Equals( angPos );

		return false;
	}

	public override int GetHashCode()
	{
		return Angle.GetHashCode() + Pos.GetHashCode();
	}
}