#ifndef PHYSIC_HPP
#define PHYSIC_HPP

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

// Les types "USpeed Game Engine"
#include "Core/CoreTypes.hpp"


namespace USpeedGameEngine
{

class Physic
{
    /****************
    * Les attributs *
    ****************/
    public :
        class PhysicState;          //!< Classe d'état physique
    protected :
    private :

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

        // Accès à l'instance unique du moteur de gestion physique
        //Physic *Physic::getInstance();

        // Permet de savoir si le moteur physique et le monde physique sont initialisés
        static bool isInitialized();
        // Initialisation du moteur physique
        static bool init();
        // Libération du moteur physique
        static void unload();

        // Affectation d'une gravité selon les axes spécifiés
        static void setGravity(USGE_Float3 gravity);
        static void setGravity(float x, float y, float z);

        // Ajoute l'objet physique spécifié
        static void addPhysicState(Physic::PhysicState *physicState);
        static void removePhysicState(Physic::PhysicState *physicState);

        // Traitement de la simulation
        static void processSimulation();

    protected :
    private :
};

}        // Fin "namespace USpeedGameEngine"

#endif
