using System; namespace Grid { public struct GridPosition : IEquatable { public int X { get; } public int Z { get; } public GridPosition(int x, int z) { X = x; Z = z; } public override string ToString() => $"{X};{Z}"; public static bool operator ==(GridPosition a, GridPosition b) => a.X == b.X && a.Z == b.Z; public static bool operator !=(GridPosition a, GridPosition b) => a.X != b.X || a.Z != b.Z; public override bool Equals(object obj) => obj is GridPosition other && Equals(other); public override int GetHashCode() => HashCode.Combine(X, Z); public bool Equals(GridPosition other) => X == other.X && Z == other.Z; public static GridPosition operator +(GridPosition a, GridPosition b) => new(a.X + b.X, a.Z + b.Z); public static GridPosition operator -(GridPosition a, GridPosition b) => new(a.X - b.X, a.Z - b.Z); } }