// Copyright (C) 2020 Jérôme Leclercq // This file is part of the "Nazara Engine - Mathematics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_EULERANGLES_HPP #define NAZARA_EULERANGLES_HPP #include #include #include #include namespace Nz { struct SerializationContext; template class EulerAngles { public: EulerAngles() = default; EulerAngles(DegreeAngle P, DegreeAngle Y, DegreeAngle R); EulerAngles(const DegreeAngle angles[3]); template EulerAngles(const Angle& angle); //EulerAngles(const Matrix3& mat); EulerAngles(const Quaternion& quat); template explicit EulerAngles(const EulerAngles& angles); EulerAngles(const EulerAngles& angles) = default; ~EulerAngles() = default; void MakeZero(); EulerAngles& Normalize(); EulerAngles& Set(DegreeAngle P, DegreeAngle Y, DegreeAngle R); EulerAngles& Set(const DegreeAngle angles[3]); template EulerAngles& Set(const Angle& angles); //EulerAngles& Set(const Matrix3& mat); EulerAngles& Set(const Quaternion& quat); template EulerAngles& Set(const EulerAngles& angles); //Matrix3 ToRotationMatrix() const; Quaternion ToQuaternion() const; std::string ToString() const; EulerAngles operator+(const EulerAngles& angles) const; EulerAngles operator-(const EulerAngles& angles) const; /*EulerAngles operator*(const EulerAngles& angles) const; EulerAngles operator/(const EulerAngles& angles) const;*/ EulerAngles& operator=(const EulerAngles& other) = default; EulerAngles& operator+=(const EulerAngles& angles); EulerAngles& operator-=(const EulerAngles& angles); /*EulerAngles operator*=(const EulerAngles& angles); EulerAngles operator/=(const EulerAngles& angles);*/ bool operator==(const EulerAngles& angles) const; bool operator!=(const EulerAngles& angles) const; static 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_EULERANGLES_HPP