96 lines
2.6 KiB
C#
96 lines
2.6 KiB
C#
using System;
|
|
|
|
namespace LibAC.Utilities
|
|
{
|
|
public class Vector3i
|
|
{
|
|
public static readonly Vector3i ZERO = new Vector3i(0, 0, 0);
|
|
public int X { get; set; }
|
|
public int Y { get; set; }
|
|
public int Z { get; set; }
|
|
|
|
public Vector3i(int X = 0, int Y = 0, int Z = 0)
|
|
{
|
|
this.X = X;
|
|
this.Y = Y;
|
|
this.Z = Z;
|
|
}
|
|
|
|
public override bool Equals(object other)
|
|
{
|
|
if (other is Vector3i)
|
|
{
|
|
Vector3i otherVector = (Vector3i)other;
|
|
return X == otherVector.X && Y == otherVector.Y && Z == otherVector.Z;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static Vector3i operator +(Vector3i v1, Vector3i v2)
|
|
{
|
|
Vector3i result = v1.Clone();
|
|
result.X += v2.X;
|
|
result.Y += v2.Y;
|
|
result.Z += v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector3i operator -(Vector3i v1, Vector3i v2)
|
|
{
|
|
Vector3i result = v1.Clone();
|
|
result.X -= v2.X;
|
|
result.Y -= v2.Y;
|
|
result.Z -= v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector3i operator *(Vector3i v1, Vector3i v2)
|
|
{
|
|
Vector3i result = v1.Clone();
|
|
result.X *= v2.X;
|
|
result.Y *= v2.Y;
|
|
result.Z *= v2.Z;
|
|
return result;
|
|
}
|
|
|
|
public static Vector3i operator /(Vector3i v1, Vector3i v2)
|
|
{
|
|
Vector3i result = v1.Clone();
|
|
result.X = (int)Math.Round((double)result.X / v2.X);
|
|
result.Y = (int)Math.Round((double)result.Y / v2.Y);
|
|
result.Z = (int)Math.Round((double)result.Z / v2.Z);
|
|
return result;
|
|
}
|
|
|
|
public static bool operator >(Vector3i v1, Vector3i v2)
|
|
{
|
|
return (v1.X > v2.X) || (v1.Y > v2.Y) || (v1.X > v2.Z);
|
|
}
|
|
|
|
public static bool operator <(Vector3i v1, Vector3i v2)
|
|
{
|
|
return (v1.X < v2.X) || (v1.Y < v2.Y) || (v1.X < v2.Z);
|
|
}
|
|
|
|
public Vector3i Clone()
|
|
{
|
|
return new Vector3i(X, Y, Z);
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"<{X}, {Y}, {Z}>";
|
|
}
|
|
|
|
public bool Inside(Vector3i min, Vector3i max)
|
|
{
|
|
return (min.X <= X && max.X >= X) && (min.Y <= Y && max.Y >= Y) && (min.Z <= Z && max.Z >= Z);
|
|
}
|
|
|
|
// Override GetHashCode if you override Equals
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(X, Y, Z);
|
|
}
|
|
}
|
|
}
|