From c8ceb4f86b61b0cb6c209cbfa8aaf0a7d2dd605c Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Perrier Date: Wed, 18 Aug 2021 12:49:38 +0200 Subject: [PATCH] Add DoubleX constructors for VectorX --- Source/Engine/Core/Math/Vector2.cpp | 21 +++++++++++++++++++ Source/Engine/Core/Math/Vector2.h | 15 ++++++++++++++ Source/Engine/Core/Math/Vector3.cpp | 24 ++++++++++++++++++++++ Source/Engine/Core/Math/Vector3.h | 18 ++++++++++++++++- Source/Engine/Core/Math/Vector4.cpp | 31 +++++++++++++++++++++++++++-- Source/Engine/Core/Math/Vector4.h | 18 +++++++++++++++++ 6 files changed, 124 insertions(+), 3 deletions(-) diff --git a/Source/Engine/Core/Math/Vector2.cpp b/Source/Engine/Core/Math/Vector2.cpp index 2c6979575..c0c40b647 100644 --- a/Source/Engine/Core/Math/Vector2.cpp +++ b/Source/Engine/Core/Math/Vector2.cpp @@ -1,5 +1,8 @@ // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. +#include "Double2.h" +#include "Double3.h" +#include "Double4.h" #include "Vector2.h" #include "Vector3.h" #include "Vector4.h" @@ -48,6 +51,24 @@ Vector2::Vector2(const Vector4& xyzw) { } +Vector2::Vector2(const Double2& xy) + : X(static_cast(xy.X)) + , Y(static_cast(xy.Y)) +{ +} + +Vector2::Vector2(const Double3& xyz) + : X(static_cast(xyz.X)) + , Y(static_cast(xyz.Y)) +{ +} + +Vector2::Vector2(const Double4& xyzw) + : X(static_cast(xyzw.X)) + , Y(static_cast(xyzw.Y)) +{ +} + Vector2::Vector2(const Color& color) : X(color.R) , Y(color.G) diff --git a/Source/Engine/Core/Math/Vector2.h b/Source/Engine/Core/Math/Vector2.h index aaea1d73c..11abd87b9 100644 --- a/Source/Engine/Core/Math/Vector2.h +++ b/Source/Engine/Core/Math/Vector2.h @@ -6,6 +6,9 @@ #include "Engine/Core/Formatting.h" #include "Engine/Core/Templates.h" +struct Double2; +struct Double3; +struct Double4; struct Vector3; struct Vector4; struct Int2; @@ -107,6 +110,18 @@ public: // @param v Vector4 to use X and Y components explicit Vector2(const Vector4& xyzw); + // Init + // @param xy Double2 to use X and Y components + explicit Vector2(const Double2& xy); + + // Init + // @param xyz Double3 to use X and Y components + explicit Vector2(const Double3& xyz); + + // Init + // @param xyzw Double4 to use X and Y components + explicit Vector2(const Double4& xyzw); + // Init // @param color Color value explicit Vector2(const Color& color); diff --git a/Source/Engine/Core/Math/Vector3.cpp b/Source/Engine/Core/Math/Vector3.cpp index 9c8783dad..176819149 100644 --- a/Source/Engine/Core/Math/Vector3.cpp +++ b/Source/Engine/Core/Math/Vector3.cpp @@ -1,5 +1,8 @@ // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. +#include "Double2.h" +#include "Double3.h" +#include "Double4.h" #include "Vector2.h" #include "Vector3.h" #include "Vector4.h" @@ -70,6 +73,27 @@ Vector3::Vector3(const Vector4& xyz) { } +Vector3::Vector3(const Double2& xy, float z) + : X(static_cast(xy.X)) + , Y(static_cast(xy.Y)) + , Z(z) +{ +} + +Vector3::Vector3(const Double3& xyz) + : X(static_cast(xyz.X)) + , Y(static_cast(xyz.Y)) + , Z(static_cast(xyz.Z)) +{ +} + +Vector3::Vector3(const Double4& xyzw) + : X(static_cast(xyzw.X)) + , Y(static_cast(xyzw.Y)) + , Z(static_cast(xyzw.Z)) +{ +} + Vector3::Vector3(const Color& color) : X(color.R) , Y(color.G) diff --git a/Source/Engine/Core/Math/Vector3.h b/Source/Engine/Core/Math/Vector3.h index 761977c96..47dc6a593 100644 --- a/Source/Engine/Core/Math/Vector3.h +++ b/Source/Engine/Core/Math/Vector3.h @@ -6,6 +6,9 @@ #include "Engine/Core/Formatting.h" #include "Engine/Core/Templates.h" +struct Double2; +struct Double3; +struct Double4; struct Quaternion; struct Matrix; struct Vector2; @@ -134,7 +137,7 @@ public: // Init // @param xy Vector2 with X and Y components values // @param z Z component value - Vector3(const Vector2& xy, float z); + explicit Vector3(const Vector2& xy, float z); // Init // @param xy Vector3 value @@ -157,6 +160,19 @@ public: // @param xyz Vector4 value explicit Vector3(const Vector4& xyz); + // Init + // @param xy Double2 with X and Y components values + // @param z Z component value + explicit Vector3(const Double2& xy, float z); + + // Init + // @param xyz Double3 value + explicit Vector3(const Double3& xyz); + + // Init + // @param xyzw Double4 value + explicit Vector3(const Double4& xyzw); + // Init // @param color Color value explicit Vector3(const Color& color); diff --git a/Source/Engine/Core/Math/Vector4.cpp b/Source/Engine/Core/Math/Vector4.cpp index 5da725c20..3549e9293 100644 --- a/Source/Engine/Core/Math/Vector4.cpp +++ b/Source/Engine/Core/Math/Vector4.cpp @@ -1,5 +1,8 @@ // Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. +#include "Double4.h" +#include "Double3.h" +#include "Double2.h" #include "Vector4.h" #include "Vector2.h" #include "Vector3.h" @@ -70,8 +73,32 @@ Vector4::Vector4(const Int3& xyz, float w) Vector4::Vector4(const Int4& xyzw) : X(static_cast(xyzw.X)) , Y(static_cast(xyzw.Y)) - , Z(static_cast(xyzw.X)) - , W(static_cast(xyzw.Y)) + , Z(static_cast(xyzw.Z)) + , W(static_cast(xyzw.W)) +{ +} + +Vector4::Vector4(const Double2& xy, float z, float w) + : X(static_cast(xy.X)) + , Y(static_cast(xy.Y)) + , Z(z) + , W(w) +{ +} + +Vector4::Vector4(const Double3& xyz, float w) + : X(static_cast(xyz.X)) + , Y(static_cast(xyz.Y)) + , Z(static_cast(xyz.Z)) + , W(w) +{ +} + +Vector4::Vector4(const Double4& xyzw) + : X(static_cast(xyzw.X)) + , Y(static_cast(xyzw.Y)) + , Z(static_cast(xyzw.Z)) + , W(static_cast(xyzw.W)) { } diff --git a/Source/Engine/Core/Math/Vector4.h b/Source/Engine/Core/Math/Vector4.h index fe25a80bd..1c0926bc3 100644 --- a/Source/Engine/Core/Math/Vector4.h +++ b/Source/Engine/Core/Math/Vector4.h @@ -7,6 +7,9 @@ #include "Engine/Core/Templates.h" #include "Math.h" +struct Double2; +struct Double3; +struct Double4; struct Vector2; struct Vector3; struct Color; @@ -151,6 +154,21 @@ public: // @param color Int4 value explicit Vector4(const Int4& xyzw); + // Init + // @param xy Double2. X and Y values in the vector + // @param z Z component value + // @param w W component value + explicit Vector4(const Double2& xy, float z, float w); + + // Init + // @param xyz Double3. X, Y and Z values in the vector + // @param w W component value + explicit Vector4(const Double3& xyz, float w); + + // Init + // @param xyzw Double4 value + explicit Vector4(const Double4& xyzw); + // Init // @param color Color value explicit Vector4(const Color& color);