106 lines
2.4 KiB
C#
106 lines
2.4 KiB
C#
using System;
|
|
using Godot;
|
|
|
|
public readonly struct 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 FromVector3(Vector3 vec)
|
|
{
|
|
return new((decimal)vec.X, (decimal)vec.Y, (decimal)vec.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);
|
|
}
|
|
}
|