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