using System; namespace LibAC.Utilities { public class Vector2i { public static readonly Vector2i ZERO = new Vector2i(0, 0); public int X { get; set; } public int Z { get; set; } public Vector2i(int X = 0, int Z = 0) { this.X = X; this.Z = Z; } public override bool Equals(object other) { if (other is Vector2i) { Vector2i otherVector = (Vector2i)other; return X == otherVector.X && Z == otherVector.Z; } return false; } public static Vector2i operator +(Vector2i v1, Vector2i v2) { Vector2i result = v1.Clone(); result.X += v2.X; result.Z += v2.Z; return result; } public static Vector2i operator -(Vector2i v1, Vector2i v2) { Vector2i result = v1.Clone(); result.X -= v2.X; result.Z -= v2.Z; return result; } public static Vector2i operator *(Vector2i v1, Vector2i v2) { Vector2i result = v1.Clone(); result.X *= v2.X; result.Z *= v2.Z; return result; } public static Vector2i operator /(Vector2i v1, Vector2i v2) { Vector2i result = v1.Clone(); result.X = (int)Math.Round((double)v1.X / v2.X); result.Z = (int)Math.Round((double)v1.Z / v2.Z); return result; } public static bool operator >(Vector2i v1, Vector2i v2) { return (v1.X > v2.X) || (v1.X > v2.Z); } public static bool operator <(Vector2i v1, Vector2i v2) { return (v1.X < v2.X) || (v1.X < v2.Z); } public Vector2i Clone() { return new Vector2i(X, Z); } public override string ToString() { return $"<{X}, {Z}>"; } public bool Inside(Vector2i min, Vector2i 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); } } }