LibZNI/Utilities/Vector2i.cs

90 lines
2.3 KiB
C#

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