using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Text.RegularExpressions; public struct Int2 { public int x; public int y; public Int2(int _x, int _y) { this.x = _x; this.y = _y; } public int this[int index] { get { return index == 0 ? this.x : index == 1 ? this.y : 0; } set { if (index == 0) { this.x = value; } else if (index == 1) { this.y = value; } } } public static Int2 zero = new Int2(0, 0); public static bool TryParse(string input, out Int2 _value) { if (string.IsNullOrEmpty(input)) { _value = Int2.zero; return false; } else { var matches = Regex.Matches(input.Trim(), "[-]{0,1}\\d+"); if (matches.Count == 2) { _value = new Int2(int.Parse(matches[0].Value), int.Parse(matches[1].Value)); return true; } else { _value = Int2.zero; return false; } } } public override bool Equals(object other) { if (other == null) { return false; } if ((other.GetType().Equals(this.GetType())) == false) { return false; } var temp = (Int2)other; return this.x.Equals(temp.x) && this.y.Equals(temp.y); } public override int GetHashCode() { return this.x.GetHashCode() + this.y.GetHashCode(); } public override string ToString() { return string.Format("({0},{1})", this.x, this.y); } public static bool operator ==(Int2 lhs, Int2 rhs) { return lhs.x == rhs.x && lhs.y == rhs.y; } public static bool operator !=(Int2 lhs, Int2 rhs) { return lhs.x != rhs.x || lhs.y != rhs.y; } public static Int2 operator +(Int2 lhs, Int2 rhs) { return new Int2(lhs.x + rhs.x, lhs.y + rhs.y); } public static Int2 operator -(Int2 lhs, Int2 rhs) { return new Int2(lhs.x - rhs.x, lhs.y - rhs.y); } } public struct Int3 { public int x; public int y; public int z; public Int3(int _x, int _y) { this.x = _x; this.y = _y; this.z = 0; } public Int3(int _x, int _y, int _z) { this.x = _x; this.y = _y; this.z = _z; } public int this[int index] { get { return index == 0 ? this.x : index == 1 ? this.y : index == 2 ? this.z : 0; } set { if (index == 0) { this.x = value; } else if (index == 1) { this.y = value; } else if (index == 2) { this.z = value; } } } public static Int3 zero = new Int3(0, 0, 0); public static bool TryParse(string input, out Int3 _value) { if (string.IsNullOrEmpty(input)) { _value = Int3.zero; return false; } else { var matches = Regex.Matches(input.Trim(), "[-]{0,1}\\d+"); if (matches.Count == 2) { _value = new Int3(int.Parse(matches[0].Value), int.Parse(matches[1].Value), 0); return true; } else if (matches.Count == 3) { _value = new Int3(int.Parse(matches[0].Value), int.Parse(matches[1].Value), int.Parse(matches[2].Value)); return true; } else { _value = Int3.zero; return false; } } } public override bool Equals(object other) { if (other == null) { return false; } if ((other.GetType().Equals(this.GetType())) == false) { return false; } var temp = (Int3)other; return this.x.Equals(temp.x) && this.y.Equals(temp.y) && this.z.Equals(temp.z); } public override int GetHashCode() { return this.x.GetHashCode() + this.y.GetHashCode() + this.z.GetHashCode(); } public override string ToString() { return string.Format("({0},{1},{2})", this.x, this.y, this.z); } public static bool operator ==(Int3 lhs, Int3 rhs) { return lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z; } public static bool operator !=(Int3 lhs, Int3 rhs) { return lhs.x != rhs.x || lhs.y != rhs.y || lhs.z != rhs.z; } public static Int3 operator +(Int3 lhs, Int3 rhs) { return new Int3(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z); } public static Int3 operator -(Int3 lhs, Int3 rhs) { return new Int3(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z); } }