imperfect-space/scripts/Vector3Dec.cs

101 lines
2.3 KiB
C#

using System;
using Godot;
public class Vector3Dec(decimal x, decimal y, decimal z)
{
public static Vector3Dec Zero { get; } = new(0, 0, 0);
public decimal X { get; } = x;
public decimal Y { get; } = y;
public decimal Z { get; } = z;
public Vector3 ToVector3()
{
return new((double)X, (double)Y, (double)Z);
}
public static Vector3Dec operator +(Vector3Dec vec1, Vector3Dec vec2)
{
return new(vec1.X + vec2.X, vec1.Y + vec2.Y, vec1.Z + vec2.Z);
}
public static Vector3Dec operator -(Vector3Dec vec1, Vector3Dec vec2)
{
return new(vec1.X - vec2.X, vec1.Y - vec2.Y, vec1.Z - vec2.Z);
}
public static Vector3Dec operator *(Vector3Dec vec1, Vector3Dec vec2)
{
return new(vec1.X * vec2.X, vec1.Y * vec2.Y, vec1.Z * vec2.Z);
}
public static Vector3Dec operator /(Vector3Dec vec1, Vector3Dec vec2)
{
return new(vec1.X / vec2.X, vec1.Y / vec2.Y, vec1.Z / vec2.Z);
}
public static Vector3Dec operator +(Vector3Dec vec, decimal value)
{
return new(vec.X + value, vec.Y + value, vec.Z + value);
}
public static Vector3Dec operator +(decimal value, Vector3Dec vec)
{
return vec + value;
}
public static Vector3Dec operator -(Vector3Dec vec, decimal value)
{
return new(vec.X - value, vec.Y - value, vec.Z - value);
}
public static Vector3Dec operator -(decimal value, Vector3Dec vec)
{
return vec - value;
}
public static Vector3Dec operator *(Vector3Dec vec, decimal value)
{
return new(vec.X * value, vec.Y * value, vec.Z * value);
}
public static Vector3Dec operator *(decimal value, Vector3Dec vec)
{
return vec * value;
}
public static Vector3Dec operator /(Vector3Dec vec, decimal value)
{
return new(vec.X / value, vec.Y / value, vec.Z / value);
}
public static Vector3Dec operator /(decimal value, Vector3Dec vec)
{
return vec / value;
}
public static Vector3Dec operator -(Vector3Dec vec)
{
return new(-vec.X, -vec.Y, -vec.Z);
}
public static bool operator ==(Vector3Dec vec1, Vector3Dec vec2)
{
return vec1.X == vec2.X && vec1.Y == vec2.Y && vec1.Z == vec2.Z;
}
public static bool operator !=(Vector3Dec vec1, Vector3Dec vec2)
{
return !(vec1 == vec2);
}
public override bool Equals(object obj)
{
return obj != null && obj is Vector3Dec vec && this == vec;
}
public override int GetHashCode()
{
return HashCode.Combine(X, Y, Z);
}
}