90 lines
2.2 KiB
C#
90 lines
2.2 KiB
C#
using System;
|
|
|
|
namespace LibAC.Utilities
|
|
{
|
|
public class Vector2d
|
|
{
|
|
public static readonly Vector2d ZERO = new Vector2d(0, 0);
|
|
public double X { get; set; }
|
|
public double Z { get; set; }
|
|
|
|
public Vector2d(double X = 0.0, double Z = 0.0)
|
|
{
|
|
this.X = X;
|
|
this.Z = Z;
|
|
}
|
|
|
|
public override bool Equals(object other)
|
|
{
|
|
if (other is Vector2d)
|
|
{
|
|
Vector2d otherVector = (Vector2d)other;
|
|
return X == otherVector.X && Z == otherVector.Z;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static Vector2d operator +(Vector2d v1, Vector2d v2)
|
|
{
|
|
Vector2d result = v1.Clone();
|
|
result.X += v2.X;
|
|
result.Z += v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector2d operator -(Vector2d v1, Vector2d v2)
|
|
{
|
|
Vector2d result = v1.Clone();
|
|
result.X -= v2.X;
|
|
result.Z -= v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector2d operator *(Vector2d v1, Vector2d v2)
|
|
{
|
|
Vector2d result = v1.Clone();
|
|
result.X *= v2.X;
|
|
result.Z *= v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector2d operator /(Vector2d v1, Vector2d v2)
|
|
{
|
|
Vector2d result = v1.Clone();
|
|
result.X /= v2.X;
|
|
result.Z /= v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static bool operator >(Vector2d v1, Vector2d v2)
|
|
{
|
|
return (v1.X > v2.X) || (v1.X > v2.Z);
|
|
}
|
|
|
|
public static bool operator <(Vector2d v1, Vector2d v2)
|
|
{
|
|
return (v1.X < v2.X) || (v1.X < v2.Z);
|
|
}
|
|
|
|
public Vector2d Clone()
|
|
{
|
|
return new Vector2d(X, Z);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"<{X}, {Z}>";
|
|
}
|
|
|
|
public bool Inside(Vector2d min, Vector2d max)
|
|
{
|
|
return (min.X <= X && max.X >= X) && (min.Z <= Z && max.Z >= Z);
|
|
}
|
|
|
|
// Override GetHashCode if you override Equals
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(X, Z);
|
|
}
|
|
}
|
|
}
|