// Copyright (C) 2024 Jérôme "SirLynix" Leclercq (lynix680@gmail.com) // This file is part of the "Nazara Engine - Math module" // For conditions of distribution and use, see copyright notice in Export.hpp #pragma once #ifndef NAZARA_MATH_EULERANGLES_HPP #define NAZARA_MATH_EULERANGLES_HPP #include #include #include #include namespace Nz { struct SerializationContext; template class EulerAngles { public: constexpr EulerAngles() = default; constexpr EulerAngles(DegreeAngle P, DegreeAngle Y, DegreeAngle R); constexpr EulerAngles(const DegreeAngle angles[3]); template constexpr EulerAngles(const Angle& angle); constexpr EulerAngles(const Quaternion& quat); template constexpr explicit EulerAngles(const EulerAngles& angles); constexpr EulerAngles(const EulerAngles&) = default; constexpr EulerAngles(EulerAngles&&) = default; ~EulerAngles() = default; constexpr bool ApproxEqual(const EulerAngles& angles, T maxDifference = std::numeric_limits::epsilon()) const; constexpr EulerAngles& Normalize(); Quaternion ToQuaternion() const; std::string ToString() const; constexpr EulerAngles operator+(const EulerAngles& angles) const; constexpr EulerAngles operator-(const EulerAngles& angles) const; constexpr EulerAngles& operator=(const EulerAngles&) = default; constexpr EulerAngles& operator=(EulerAngles&&) = default; constexpr EulerAngles& operator+=(const EulerAngles& angles); constexpr EulerAngles& operator-=(const EulerAngles& angles); constexpr bool operator==(const EulerAngles& angles) const; constexpr bool operator!=(const EulerAngles& angles) const; constexpr bool operator<(const EulerAngles& angles) const; constexpr bool operator<=(const EulerAngles& angles) const; constexpr bool operator>(const EulerAngles& angles) const; constexpr bool operator>=(const EulerAngles& angles) const; static constexpr bool ApproxEqual(const EulerAngles& lhs, const EulerAngles& rhs, T maxDifference = std::numeric_limits::epsilon()); static constexpr EulerAngles Zero(); DegreeAngle pitch, yaw, roll; }; using EulerAnglesd = EulerAngles; using EulerAnglesf = EulerAngles; template bool Serialize(SerializationContext& context, const EulerAngles& eulerAngles, TypeTag>); template bool Unserialize(SerializationContext& context, EulerAngles* eulerAngles, TypeTag>); template std::ostream& operator<<(std::ostream& out, const Nz::EulerAngles& angles); } #include #endif // NAZARA_MATH_EULERANGLES_HPP