#ifndef MATERIAL_HPP
#define MATERIAL_HPP

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

namespace USpeedGameEngine
{

class Material
{
    /****************
    * Les attributs *
    ****************/
    public :
        class Texture;          //!< Classe de texture

        Texture *texture;       //!< La texture à appliquer
        USGE_Float3 color;      //!< La couleur de surface du matériau
        USGE_Float3 ambient;    //!< La couleur ambiante du matériau
        USGE_Float3 diffuse;    //!< La couleur diffuse du matériau
        USGE_Float3 specular;   //!< La couleur spéculaire du matériau
        USGE_Float3 emission;   //!< La couleur d'émission du matériau
        float shininess;        //!< La force de surbrillance du matériau (en pourcentage entre 0.0f et 1.0f)
        float opacity;          //!< L'opacité du matériau (0.0f : transparence totale, 1.0f : opacité totale)
    protected :
    private :

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

        // Permet d'effacer les données et ré-initialiser les variables.
        void clear();

        /////////////////
        // Affectation //
        /////////////////
        // Application d'une texture.
        void setTexture(Texture *tex);
        // Définition de la couleur de surface.
        void setColor(USGE_Float3 const &color);
        // Définition de la couleur ambiante.
        void setAmbient(USGE_Float3 const &color);
        // Définition de la couleur diffuse.
        void setDiffuse(USGE_Float3 const &color);
        // Définition de la couleur spéculaire.
        void setSpecular(USGE_Float3 const &color);
        // Définition de la couleur d'émission.
        void setEmission(USGE_Float3 const &color);
        // Définition du pourcentage de surbrillance.
        void setShininess(float percent);
        // Définition du pourcentage d'opacité.
        void setOpacity(float percent);

        ///////////
        // Accès //
        ///////////
        // Récupération de la texture.
        Texture *getTexture();
        // Récupération de la couleur de surface.
        USGE_Float3 getColor();
        void getColor(USGE_Float3 &target);
        // Récupération de la couleur ambiante.
        USGE_Float3 getAmbient();
        void getAmbient(USGE_Float3 &target);
        // Récupération de la couleur diffuse.
        USGE_Float3 getDiffuse();
        void getDiffuse(USGE_Float3 &target);
        // Récupération de la couleur spéculaire.
        USGE_Float3 getSpecular();
        void getSpecular(USGE_Float3 &target);
        // Récupération de la couleur d'émission.
        USGE_Float3 getEmission();
        void getEmission(USGE_Float3 &target);
        // Récupération du pourcentage de surbrillance.
        float getShininess();
        // Récupération du pourcentage d'opacité.
        float getOpacity();

    protected :
    private :
};

}        // Fin "namespace USpeedGameEngine"

#endif
