diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..adc159a 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/include/uml/ProjectilePredictor.h b/include/uml/ProjectilePredictor.h index 1a18b34..ad7dc47 100644 --- a/include/uml/ProjectilePredictor.h +++ b/include/uml/ProjectilePredictor.h @@ -4,7 +4,6 @@ #pragma once #include -#include #include @@ -35,7 +34,6 @@ namespace uml::prediction const Projectile& projectile) const; private: - const float m_gravity; const float m_maxTravelTime; const float m_timeStepSize; @@ -49,8 +47,9 @@ namespace uml::prediction const Vector3& targetPosition) const; [[nodiscard]] - std::optional ProjectileTravelTime(const Vector3& end, const Projectile& projectile, - const float angle) const; + std::optional ProjectileTravelTime(const Vector3& end, + const Projectile& projectile, + float angle) const; }; }; diff --git a/include/uml/Vector4.h b/include/uml/Vector4.h index 6d928f4..a09a984 100644 --- a/include/uml/Vector4.h +++ b/include/uml/Vector4.h @@ -12,10 +12,13 @@ namespace uml public: float w = 0.f; - Vector4(float x = 0.f, float y = 0.f, float z = 0.f, float w = 0.f) : Vector3(x, y, z), w(w) {} + Vector4(const float x = 0.f, const float y = 0.f, const float z = 0.f, const float w = 0.f) : Vector3(x, y, z), w(w) {} Vector4() = default; + [[nodiscard]] bool operator==(const Vector4& src) const; + + [[nodiscard]] bool operator!=(const Vector4& src) const; Vector4& operator+=(const Vector4& v); @@ -28,15 +31,32 @@ namespace uml [[nodiscard]] float Length() const; [[nodiscard]] float LengthSqr() const; [[nodiscard]] float Dot(const Vector4& vOther) const; + Vector4& Abs(); + Vector4& Clamp(float min, float max); + + [[nodiscard]] Vector4 operator-() const; + + [[nodiscard]] Vector4 operator+(const Vector4& v) const; + + [[nodiscard]] Vector4 operator-(const Vector4& v) const; + + [[nodiscard]] Vector4 operator*(float scalar) const; + + [[nodiscard]] Vector4 operator*(const Vector4& v) const; + + [[nodiscard]] Vector4 operator/(float scalar) const; + + [[nodiscard]] Vector4 operator/(const Vector4& v) const; - [[nodiscard]] float Sum() const; + [[nodiscard]] + float Sum() const; }; } diff --git a/include/uml/color.h b/include/uml/color.h index f811395..d5c05ff 100644 --- a/include/uml/color.h +++ b/include/uml/color.h @@ -19,7 +19,7 @@ namespace uml::color public: Color(float r, float g, float b, float a); static Color FromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a); - explicit Color(const Vector4& vec); + explicit Color(Vector4 vec); [[nodiscard]] Color Blend(const Color& other, float ratio) const; [[nodiscard]] static Color Red() {return {1.f, 0.f, 0.f, 1.f};} diff --git a/source/Vector4.cpp b/source/Vector4.cpp index fadd177..62a834b 100644 --- a/source/Vector4.cpp +++ b/source/Vector4.cpp @@ -3,6 +3,8 @@ // #include "uml/Vector4.h" + +#include #include namespace uml @@ -81,39 +83,48 @@ namespace uml return *this; } + Vector4& Vector4::Clamp(const float min, const float max) + { + x = std::clamp(x, min, max); + y = std::clamp(y, min, max); + z = std::clamp(z, min, max); + + return *this; + } + Vector4 Vector4::operator-() const { - return Vector4(-x, -y, -z, -w); + return {-x, -y, -z, -w}; } Vector4 Vector4::operator+(const Vector4& v) const { - return Vector4(x + v.x, y + v.y, z + v.z, w + v.w); + return {x + v.x, y + v.y, z + v.z, w + v.w}; } Vector4 Vector4::operator-(const Vector4& v) const { - return Vector4(x - v.x, y - v.y, z - v.z, w - v.w); + return {x - v.x, y - v.y, z - v.z, w - v.w}; } Vector4 Vector4::operator*(float scalar) const { - return Vector4(x * scalar, y * scalar, z * scalar, w * scalar); + return {x * scalar, y * scalar, z * scalar, w * scalar}; } Vector4 Vector4::operator*(const Vector4& v) const { - return Vector4(x * v.x, y * v.y, z * v.z, w * v.w); + return {x * v.x, y * v.y, z * v.z, w * v.w}; } Vector4 Vector4::operator/(float scalar) const { - return Vector4(x / scalar, y / scalar, z / scalar, w / scalar); + return {x / scalar, y / scalar, z / scalar, w / scalar}; } Vector4 Vector4::operator/(const Vector4& v) const { - return Vector4(x / v.x, y / v.y, z / v.z, w / v.w); + return {x / v.x, y / v.y, z / v.z, w / v.w}; } float Vector4::Sum() const diff --git a/source/color.cpp b/source/color.cpp index 876d056..d056008 100644 --- a/source/color.cpp +++ b/source/color.cpp @@ -17,20 +17,22 @@ namespace uml::color return Color( (*this * (1.f - ratio)) + (other * ratio) ); } - Color::Color(float r, float g, float b, float a) : Vector4(r,g,b,a) + Color::Color(const float r, const float g, const float b, const float a) + : Vector4(std::clamp(r, 0.f, 1.f), + std::clamp(g, 0.f, 1.f), + std::clamp(b, 0.f, 1.f), + std::clamp(a, 0.f, 1.f)) { } - Color::Color(const Vector4 &vec) : Vector4(vec) + Color::Color(Vector4 vec) : Vector4(vec.Clamp(0.f, 1.f)) { } Color Color::FromRGBA(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255) { - return Color{Vector4(r, g, b, a) / 255.f}; - } } \ No newline at end of file diff --git a/tests/UnitTestMatrix.cpp b/tests/UnitTestMatrix.cpp index cad8f5d..ecf0693 100644 --- a/tests/UnitTestMatrix.cpp +++ b/tests/UnitTestMatrix.cpp @@ -4,6 +4,8 @@ #include #include #include + + TEST(UnitTestMatrix, ToString) { uml::matrix matrix(2, 2);