#include "commun.h"

int couleursDefaut[8][3]=     {
    {0,0,0},                        //Couleur du haut
    {0,0,31},                       //Couleur du bas
    {31,31,31},                     //Couleur du texte
    {31,31,0},                      //Couleur du titre
    {31,0,0},                       //Surbrillance 1
    {31,31,0},                      //Surbrillance 2
    {31,31,0},                      //Messages (texte)
    {0,0,0},                        //Messages (fond)
};

int couleurs[8][3];

char str[100];
int gblCouleur;
int gblSur=0;

unsigned char *FctMenu1Couleur(int demande, int param, int touches)      {
    if (demande==DEM_OPTION)            {
        sprintf(str,"%i",couleurs[gblCouleur][param]);
        return str;
    }
    else if (demande==DEM_GESTION)          {
        int ancCoul=couleurs[gblCouleur][param];

        if (touches&TOUCHE_L)          {
            JoueSon("curs1.son");
            couleurs[gblCouleur][param]-=4;
        }
        else if (touches&TOUCHE_R)          {
            JoueSon("curs1.son");
            couleurs[gblCouleur][param]+=4;
        }
        
        if (touches&TOUCHE_DROITE)          {
            JoueSon("curs1.son");
            couleurs[gblCouleur][param]++;
        }
        else if (touches&TOUCHE_GAUCHE)     {
            JoueSon("curs1.son");
            couleurs[gblCouleur][param]--;
        }
        
        if (couleurs[gblCouleur][param]<0)      {
            if (touches&(TOUCHE_L|TOUCHE_R))        {
                if (ancCoul==0)
                    couleurs[gblCouleur][param]=31;
                else
                    couleurs[gblCouleur][param]=0;
            }
            else
                couleurs[gblCouleur][param]+=32;
        }
        if (couleurs[gblCouleur][param]>=32)            {
            if (touches&(TOUCHE_L|TOUCHE_R))        {
                if (ancCoul==31)
                    couleurs[gblCouleur][param]=0;
                else
                    couleurs[gblCouleur][param]=31;
            }
            else
                couleurs[gblCouleur][param]-=32;
        }

        ChangeCouleursBteDialogue();

        if (touches&TOUCHE_A)           {
            JoueSon("curs2.son");
            return (unsigned char*)2;
        }
    }
    
    //Ne devrait pas arriver ici mais il faut toujours retourner quelque chose et c'est mieux pas de retourner NULL, car même si cette valeur est gérée par le dessinateur de menu, il n'affichera simplement rien. Dur dans ces conditionsn de détecter une erreur...
    return "Erreur";
}

//Evenement spécial pour le menu couleurs
EVENEMENT evMenu1Couleur=      {
    "Choisir une couleur",
    "Les couleurs sont en RVB\n   Rouge: #|+vert->jaune, +bleu->rose#\n   Vert: #|+rouge->jaune, +bleu->turquoise#\n   Bleu: #|+rouge->rose, +vert->turquoise#",
    FctMenu1Couleur
};

unsigned char *FctSur(int demande, int param, int touches)      {
    if (demande==DEM_ACTION)            {
        JoueSon("curs2.son");
        gblSur=param;
        return (unsigned char *)2;
    }

    //Ne devrait pas arriver ici mais il faut toujours retourner quelque chose et c'est mieux pas de retourner NULL, car même si cette valeur est gérée par le dessinateur de menu, il n'affichera simplement rien. Dur dans ces conditionsn de détecter une erreur...
    return "Erreur";
}

//Evenement pour demander si l'utilisateur est vraiment sûr
EVENEMENT evSur=      {
    "Êtes-vous sûr(e)?",
    "##Non\n##Oui",
    FctSur
};


unsigned char *FctMenuCouleurs(int demande, int param, int touches)      {
    if (demande==DEM_OPTION)            {
        if (param>=0 && param<=7)           {
            sprintf(str,"%i,%i,%i",couleurs[param][0],couleurs[param][1],couleurs[param][2]);
            return str;
        }
        else if (param==8)
            return bTransp?"Oui":"Non";
    }
    else if (demande==DEM_ACTION)           {
        if (param>=0 && param<=7)       {
            JoueSon("curs2.son");
            gblCouleur=param;
            SelectionneProjet(gblCurs,&evMenu1Couleur);
        }
        else if (param==8)            {
            JoueSon("curs2.son");
            bTransp=!bTransp;
            if (bTransp)
                REG_COLEV = 8 + (8<<8);
            else
                REG_COLEV = 16;
            return (unsigned char*)0;
        }
        else if (param==9)            {
            JoueSon("alerte.son");
            SelectionneProjet(gblCurs,&evSur);
            if (gblSur)     {
                InitCouleurs();
                ChangeCouleursBteDialogue();
            }
        }
        return (unsigned char*)0;
    }
    //Ne devrait pas arriver ici mais il faut toujours retourner quelque chose et c'est mieux pas de retourner NULL, car même si cette valeur est gérée par le dessinateur de menu, il n'affichera simplement rien. Dur dans ces conditionsn de détecter une erreur...
    return "Erreur";
}


//Evenement spécial pour le menu couleurs
EVENEMENT evMenuCouleurs=      {
    "Menu couleurs",
    "   Haut boîte: #|Couleur du haut de la boîte#\n   Bas boîte: #|Couleur du bas de la boîte#\n   Texte: #|Couleur du texte de la boîte#\n   Titre: #|Couleur du titre de la boîte#\n   Surbrillance 1: #|Couleur de départ de l'option en surbrillance#\n   Surbrillance 2: #|Couleur de fin de l'option en surbrillance#\n   Message: #|Couleur du texte du message#\n   Fond message: #|Couleur de fond du message#\n   Transparence: #|Transparence des boîtes de dialogue#\n#|Réinitialise toutes les couleurs par défaut#Réinitialiser tout!",
    FctMenuCouleurs
};

void MCMain(CURSEUR *curs)           {
    JoueSon("curs2.son");
    SelectionneProjet(gblCurs,&evMenuCouleurs);
}

void InitCouleurs()         {
    memcpy(couleurs,couleursDefaut,sizeof(couleurs));
    bTransp=1;
    REG_COLEV = 8 + (8<<8);
}

/*extern MEM_FUNC_IN_IWRAM double pow _PARAMS((double, double));
unsigned char coeffs[32];

void CreeTablesGamma(double gamma)      {
    int y;

	for (y=0;y<32;y++)
    	coeffs[y]=(unsigned char)(31.0*pow((y/31.0),gamma));
}*/




