#ifndef MATH_HPP
#define MATH_HPP

// Détection du système cible...
#include "usgeDetectSystem.h"

namespace USpeedGameEngine
{

class Math
{
    /****************
    * Les attributs *
    ****************/
    public :
        class Matrix4x4;                    //!< Classe pour les matrices 4x4
        class Point3D;                      //!< Classe pour les points 3D
        class Quaternion;                   //!< Classe pour les quaternions
        class Vector3D;                     //!< Classe pour les vecteurs 3D

        static const float PI;              //!< Valeur approximative de PI
        static const float Epsilon;         //!< Valeur très petite
        static const int FloatAccuracy;     //!< La précision d'un float (nombre de chiffres après la virgule
    protected :
    private :

    /***************
    * Les méthodes *
    ***************/
    public :
        // Constructeur par défaut
        Math();
        // Destructeur par défaut
        ~Math();

        // Convertit des degrés en radians
        static float degToRad(float angle);
        // Convertit des radians en degrés
        static float radToDeg(float angle);
        // Compare deux "float" avec une tolérance
        static bool compareFloat(float first, float second);
        // Borne la valeur fournie
        static float limitRange(float low, float value, float high);
        // Met à zéro la valeur si elle passe en dessous de la valeur minimale de plancher (Epsilon)
        static float zeroClamp(float value);
        // Arrondissement d'une valeur
        static float round(const float value);
        static float round(const float value, const int accuracy);

    protected :
    private :
};

}        // Fin "namespace USpeedGameEngine"

#endif
