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