diff --git a/Engine.Core/Primitives/Vector2D.cs b/Engine.Core/Primitives/Vector2D.cs index 6009875..fbe4291 100644 --- a/Engine.Core/Primitives/Vector2D.cs +++ b/Engine.Core/Primitives/Vector2D.cs @@ -82,11 +82,19 @@ public readonly struct Vector2D(float x, float y) : IEquatable public static bool operator ==(Vector2D left, Vector2D right) => left.X == right.X && left.Y == right.Y; public static bool operator !=(Vector2D left, Vector2D right) => left.X != right.X || left.Y != right.Y; - public static implicit operator System.Numerics.Vector2(Vector2D vector) => new(vector.X, vector.Y); - public static implicit operator Vector2D(System.Numerics.Vector2 vector) => new(vector.X, vector.Y); public static implicit operator Vector2D(Vector2DInt vector) => new(vector.X, vector.Y); - public static implicit operator Vector2D(Vector3D vector) => new(vector.X, vector.Y); + public static implicit operator Vector2D(Vector3DInt vector) => new(vector.X, vector.Y); + + public static implicit operator System.Numerics.Vector2(Vector2D vector) => new(vector.X, vector.Y); + public static implicit operator System.Numerics.Vector3(Vector2D vector) => new(vector.X, vector.Y, 0f); + public static implicit operator System.Numerics.Vector4(Vector2D vector) => new(vector.X, vector.Y, 0f, 0f); + + public static implicit operator Vector2D(System.Numerics.Vector2 vector) => new(vector.X, vector.Y); public static implicit operator Vector2D(System.Numerics.Vector3 vector) => new(vector.X, vector.Y); + public static implicit operator Vector2D(System.Numerics.Vector4 vector) => new(vector.X, vector.Y); + + public static implicit operator Vector2D(Vector3D vector) => new(vector.X, vector.Y); + public static implicit operator Vector2D(Vector4D vector) => new(vector.X, vector.Y); /// /// Calculates the length of the . diff --git a/Engine.Core/Primitives/Vector2DInt.cs b/Engine.Core/Primitives/Vector2DInt.cs index 31b9f37..ba9a58e 100644 --- a/Engine.Core/Primitives/Vector2DInt.cs +++ b/Engine.Core/Primitives/Vector2DInt.cs @@ -74,9 +74,12 @@ public readonly struct Vector2DInt(int x, int y) : IEquatable public static bool operator ==(Vector2DInt left, Vector2DInt right) => left.X == right.X && left.Y == right.Y; public static bool operator !=(Vector2DInt left, Vector2DInt right) => left.X != right.X || left.Y != right.Y; - public static implicit operator Vector2DInt(Vector2D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt()); public static implicit operator Vector2DInt(Vector3DInt vector) => new(vector.X, vector.Y); + public static implicit operator Vector2DInt(Vector2D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt()); + public static implicit operator Vector2DInt(Vector3D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt()); + public static implicit operator Vector2DInt(Vector4D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt()); + /// /// Calculates the length of the . /// diff --git a/Engine.Core/Primitives/Vector3D.cs b/Engine.Core/Primitives/Vector3D.cs index 3551f35..8b0598b 100644 --- a/Engine.Core/Primitives/Vector3D.cs +++ b/Engine.Core/Primitives/Vector3D.cs @@ -92,11 +92,19 @@ public readonly struct Vector3D(float x, float y, float z) : IEquatable left.X == right.X && left.Y == right.Y && left.Z == right.Z; public static bool operator !=(Vector3D left, Vector3D right) => left.X != right.X || left.Y != right.Y || left.Z != right.Z; - public static implicit operator System.Numerics.Vector3(Vector3D vector) => new(vector.X, vector.Y, vector.Z); - public static implicit operator Vector3D(System.Numerics.Vector3 vector) => new(vector.X, vector.Y, vector.Z); + public static implicit operator Vector3D(Vector2DInt vector) => new(vector.X, vector.Y, 0f); public static implicit operator Vector3D(Vector3DInt vector) => new(vector.X, vector.Y, vector.Z); - public static implicit operator Vector3D(Vector2D vector) => new(vector.X, vector.Y, 0f); + + public static implicit operator System.Numerics.Vector2(Vector3D vector) => new(vector.X, vector.Y); + public static implicit operator System.Numerics.Vector3(Vector3D vector) => new(vector.X, vector.Y, vector.Z); + public static implicit operator System.Numerics.Vector4(Vector3D vector) => new(vector.X, vector.Y, vector.Z, 0f); + public static implicit operator Vector3D(System.Numerics.Vector2 vector) => new(vector.X, vector.Y, 0f); + public static implicit operator Vector3D(System.Numerics.Vector3 vector) => new(vector.X, vector.Y, vector.Z); + public static implicit operator Vector3D(System.Numerics.Vector4 vector) => new(vector.X, vector.Y, vector.Z); + + public static implicit operator Vector3D(Vector2D vector) => new(vector.X, vector.Y, 0f); + public static implicit operator Vector3D(Vector4D vector) => new(vector.X, vector.Y, vector.Z); /// /// Calculates the length of the . diff --git a/Engine.Core/Primitives/Vector3DInt.cs b/Engine.Core/Primitives/Vector3DInt.cs index 817351f..e35c195 100644 --- a/Engine.Core/Primitives/Vector3DInt.cs +++ b/Engine.Core/Primitives/Vector3DInt.cs @@ -84,9 +84,12 @@ public readonly struct Vector3DInt(int x, int y, int z) : IEquatable left.X == right.X && left.Y == right.Y && left.Z == right.Z; public static bool operator !=(Vector3DInt left, Vector3DInt right) => left.X != right.X || left.Y != right.Y || left.Z != right.Z; - public static implicit operator Vector3DInt(Vector3D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt(), vector.Z.RoundToInt()); public static implicit operator Vector3DInt(Vector2DInt vector) => new(vector.X, vector.Y, 0); + public static implicit operator Vector3DInt(Vector2D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt(), 0); + public static implicit operator Vector3DInt(Vector3D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt(), vector.Z.RoundToInt()); + public static implicit operator Vector3DInt(Vector4D vector) => new(vector.X.RoundToInt(), vector.Y.RoundToInt(), vector.Z.RoundToInt()); + /// /// Calculates the length of the . /// diff --git a/Engine.Core/Primitives/Vector4D.cs b/Engine.Core/Primitives/Vector4D.cs index 4e38feb..b613933 100644 --- a/Engine.Core/Primitives/Vector4D.cs +++ b/Engine.Core/Primitives/Vector4D.cs @@ -90,9 +90,20 @@ public readonly struct Vector4D(float x, float y, float z, float w) : IEquatable public static bool operator ==(Vector4D left, Vector4D right) => left.X == right.X && left.Y == right.Y && left.Z == right.Z && left.W == right.W; public static bool operator !=(Vector4D left, Vector4D right) => left.X != right.X || left.Y != right.Y || left.Z != right.Z || left.W != right.W; + public static implicit operator Vector4D(Vector2DInt vector) => new(vector.X, vector.Y, 0f, 0f); + public static implicit operator Vector4D(Vector3DInt vector) => new(vector.X, vector.Y, vector.Z, 0f); + + public static implicit operator System.Numerics.Vector2(Vector4D vector) => new(vector.X, vector.Y); + public static implicit operator System.Numerics.Vector3(Vector4D vector) => new(vector.X, vector.Y, vector.Z); public static implicit operator System.Numerics.Vector4(Vector4D vector) => new(vector.X, vector.Y, vector.Z, vector.W); + + public static implicit operator Vector4D(System.Numerics.Vector2 vector) => new(vector.X, vector.Y, 0f, 0f); + public static implicit operator Vector4D(System.Numerics.Vector3 vector) => new(vector.X, vector.Y, vector.Z, 0f); public static implicit operator Vector4D(System.Numerics.Vector4 vector) => new(vector.X, vector.Y, vector.Z, vector.W); + public static implicit operator Vector4D(Vector2D vector) => new(vector.X, vector.Y, 0f, 0f); + public static implicit operator Vector4D(Vector3D vector) => new(vector.X, vector.Y, vector.Z, 0f); + /// /// Calculates the length of the . ///