#ifndef VIDEO_CAMERA_HPP
#define VIDEO_CAMERA_HPP

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

// C++
#include <string>

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


namespace USpeedGameEngine
{

class Video::Camera
{
    /****************
    * Les attributs *
    ****************/
    public :
        bool isTarget;          //!< Permet de savoir si la caméra est libre ou avec cible
        USGE_Float3 position;   //!< La position de la caméra (coordonnées x, y et z)
        USGE_Float3 direction;  //!< CAMÉRA LIBRE : L'orientation de la caméra (angles x, y et z).<br />CAMÉRA A CIBLE : Le point de visée.
        USGE_Float3 upVector;   //!< CAMÉRA A CIBLE : Les axes d'orientation de la caméra. Y+ : (0, 1, 0) par défaut.
    protected :
    private :

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

        // Permet de choisir la caméra à utiliser.
        static void setActiveCamera(Video::Camera *cam);

        //////////////////////////
        // Concernant la caméra //
        //////////////////////////
        // Permet de définir si la caméra est libre ou avec cible.
        void setType(bool pTarget);
        // Permet de savoir si la caméra est libre ou avec cible.
        bool getType();

        // Permet de définir la position de la caméra.
        void setPosition(USGE_Float3 pos);
        // Permet de connaître la position de la caméra.
        USGE_Float3 getPosition();

        // Permet de définir l'orientation de la caméra.
        void setDirection(USGE_Float3 dir);
        // Permet de connaître l'orientation de la caméra.
        USGE_Float3 getDirection();

        // Permet de définir les axes d'orientation de la caméra avec point de visée.
        void setUpVector(USGE_Float3 upVect);
        // Permet de connaître les axes d'orientation de la caméra avec point de visée.
        USGE_Float3 getUpVector();

    protected :
    private :

};

}        // Fin "namespace USpeedGameEngine"

#endif
