diff --git a/CMakeLists.txt b/CMakeLists.txt index a8229e3..b2bf452 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ option(OMATH_BUILD_TESTS "Build unit tests" OFF) option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON) option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF) option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ON) - +option(OMATH_IMGUI_INTEGRATION "Omath will define method to convert omath types to imgui types" OFF) if (OMATH_BUILD_AS_SHARED_LIBRARY) add_library(omath SHARED source/Vector3.cpp) @@ -17,6 +17,14 @@ else() add_library(omath STATIC source/Matrix.cpp) endif() +if (OMATH_IMGUI_INTEGRATION) + target_compile_definitions(omath PUBLIC OMATH_IMGUI_INTEGRATION) +endif() + +if (OMATH_USE_AVX2) + target_compile_definitions(omath PUBLIC OMATH_USE_AVX2) +endif() + set_target_properties(omath PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" @@ -31,9 +39,6 @@ endif() target_compile_features(omath PUBLIC cxx_std_23) -if (OMATH_USE_AVX2) - target_compile_definitions(omath PUBLIC OMATH_USE_AVX2) -endif() add_subdirectory(source) diff --git a/include/omath/Vector2.hpp b/include/omath/Vector2.hpp index 60d2ed5..f2ae0c3 100644 --- a/include/omath/Vector2.hpp +++ b/include/omath/Vector2.hpp @@ -3,13 +3,19 @@ // #pragma once -#include #include +#include + +#ifdef OMATH_IMGUI_INTEGRATION +#include +#endif + namespace omath { - template requires std::is_arithmetic_v + template + requires std::is_arithmetic_v class Vector2 { public: @@ -19,7 +25,9 @@ namespace omath // Constructors constexpr Vector2() = default; - constexpr Vector2(const Type& x, const Type& y) : x(x), y(y) {} + constexpr Vector2(const Type& x, const Type& y) : x(x), y(y) + { + } // Equality operators [[nodiscard]] @@ -145,23 +153,12 @@ namespace omath constexpr Vector2& Abs() { - //FIXME: Replace with std::abs, if it will become constexprable + // FIXME: Replace with std::abs, if it will become constexprable x = x < 0 ? -x : x; y = y < 0 ? -y : y; return *this; } - template - [[nodiscard]] constexpr const type& As() const - { - return *reinterpret_cast(this); - } - template - [[nodiscard]] constexpr type& As() - { - return *reinterpret_cast(this); - } - [[nodiscard]] constexpr Vector2 operator-() const { return {-x, -y}; @@ -188,7 +185,7 @@ namespace omath return {x / fl, y / fl}; } - // Sum of elements + // Sum of elements [[nodiscard]] constexpr Type Sum() const { return x + y; @@ -199,5 +196,13 @@ namespace omath { return std::make_tuple(x, y); } + +#ifdef OMATH_IMGUI_INTEGRATION + [[nodiscard]] + ImVec2 ToImVec2() const + { + return {static_cast(this->x), static_cast(this->y)}; + } +#endif }; -} \ No newline at end of file +} // namespace omath diff --git a/include/omath/Vector3.hpp b/include/omath/Vector3.hpp index 588c608..c3ffcd0 100644 --- a/include/omath/Vector3.hpp +++ b/include/omath/Vector3.hpp @@ -4,13 +4,12 @@ #pragma once +#include "Vector2.hpp" #include -#include -#include "omath/Vector2.hpp" -#include "omath/Angle.hpp" #include -#include - +#include +#include "omath/Angle.hpp" +#include "omath/Vector2.hpp" namespace omath { diff --git a/include/omath/Vector4.hpp b/include/omath/Vector4.hpp index f4fcadd..258cf73 100644 --- a/include/omath/Vector4.hpp +++ b/include/omath/Vector4.hpp @@ -6,6 +6,7 @@ #include #include + namespace omath { template @@ -154,5 +155,19 @@ namespace omath { return Vector3::Sum() + w; } + +#ifdef OMATH_IMGUI_INTEGRATION + [[nodiscard]] + ImVec4 ToImVec4() const + { + return + { + static_cast(this->x), + static_cast(this->y), + static_cast(this->z), + static_cast(w), + }; + } +#endif }; }