diff --git a/include/Nazara/Math/Vector2.hpp b/include/Nazara/Math/Vector2.hpp index a448cd3ce..6e4fe029a 100644 --- a/include/Nazara/Math/Vector2.hpp +++ b/include/Nazara/Math/Vector2.hpp @@ -88,6 +88,7 @@ namespace Nz constexpr bool operator>(const Vector2& vec) const; constexpr bool operator>=(const Vector2& vec) const; + static constexpr Vector2 Apply(T(*func)(T), const Vector2& vec); static constexpr bool ApproxEqual(const Vector2& lhs, const Vector2& rhs, T maxDifference = std::numeric_limits::epsilon()); template static U Distance(const Vector2& vec1, const Vector2& vec2); static constexpr T DotProduct(const Vector2& vec1, const Vector2& vec2); diff --git a/include/Nazara/Math/Vector2.inl b/include/Nazara/Math/Vector2.inl index 66b34ae90..dd37ae0cb 100644 --- a/include/Nazara/Math/Vector2.inl +++ b/include/Nazara/Math/Vector2.inl @@ -600,6 +600,12 @@ namespace Nz return y >= vec.y; } + template + constexpr Vector2 Vector2::Apply(T(*func)(T), const Vector2& vec) + { + return Vector2(func(vec.x), func(vec.y)); + } + template constexpr bool Vector2::ApproxEqual(const Vector2& lhs, const Vector2& rhs, T maxDifference) { diff --git a/include/Nazara/Math/Vector3.hpp b/include/Nazara/Math/Vector3.hpp index e67a32f85..fb222396b 100644 --- a/include/Nazara/Math/Vector3.hpp +++ b/include/Nazara/Math/Vector3.hpp @@ -92,6 +92,7 @@ namespace Nz constexpr bool operator>(const Vector3& vec) const; constexpr bool operator>=(const Vector3& vec) const; + static constexpr Vector3 Apply(T(*func)(T), const Vector3& vec); static constexpr bool ApproxEqual(const Vector3& lhs, const Vector3& rhs, T maxDifference = std::numeric_limits::epsilon()); static constexpr Vector3 Backward(); static constexpr Vector3 Clamp(const Vector3& vec, const Vector3& min, const Vector3& max); diff --git a/include/Nazara/Math/Vector3.inl b/include/Nazara/Math/Vector3.inl index 8ae783360..c0e34d232 100644 --- a/include/Nazara/Math/Vector3.inl +++ b/include/Nazara/Math/Vector3.inl @@ -688,6 +688,12 @@ namespace Nz return z >= vec.z; } + template + constexpr Vector3 Vector3::Apply(T(*func)(T), const Vector3& vec) + { + return Vector3(func(vec.x), func(vec.y), func(vec.z)); + } + template constexpr bool Vector3::ApproxEqual(const Vector3& lhs, const Vector3& rhs, T maxDifference) { diff --git a/include/Nazara/Math/Vector4.hpp b/include/Nazara/Math/Vector4.hpp index d5ad06f72..187e64bf9 100644 --- a/include/Nazara/Math/Vector4.hpp +++ b/include/Nazara/Math/Vector4.hpp @@ -85,6 +85,7 @@ namespace Nz constexpr bool operator>(const Vector4& vec) const; constexpr bool operator>=(const Vector4& vec) const; + static constexpr Vector4 Apply(T(*func)(T), const Vector4& vec); static constexpr bool ApproxEqual(const Vector4& lhs, const Vector4& rhs, T maxDifference = std::numeric_limits::epsilon()); static constexpr T DotProduct(const Vector4& vec1, const Vector4& vec2); static constexpr Vector4 Lerp(const Vector4& from, const Vector4& to, T interpolation); diff --git a/include/Nazara/Math/Vector4.inl b/include/Nazara/Math/Vector4.inl index 8c5cddccf..f5af802b8 100644 --- a/include/Nazara/Math/Vector4.inl +++ b/include/Nazara/Math/Vector4.inl @@ -644,6 +644,12 @@ namespace Nz return w >= vec.w; } + template + constexpr Vector4 Vector4::Apply(T(*func)(T), const Vector4& vec) + { + return Vector4(func(vec.x), func(vec.y), func(vec.z), func(vec.w)); + } + template constexpr bool Vector4::ApproxEqual(const Vector4& lhs, const Vector4& rhs, T maxDifference) {