#include "gestionnaireNiveaux.h" GestionnaireNiveaux::GestionnaireNiveaux(SDL_Surface *screen): m_pageActuelle(0),m_estChoisi(false),m_choixJoueur("nothings"),m_screen(screen), m_font(0), m_pagePrecedente(0), m_pageSuivante(0) { ///[1] Création des boutons //[1.1] Changement de pages m_pagePrecedente = new Bouton(SDL_LoadBMP("Images/gauche.bmp"), screen, 300-154, 560); m_pageSuivante = new Bouton(SDL_LoadBMP("Images/droite.bmp"), screen, 300, 560); //[1.2] Niveaux for (int i(0); i<NB_BOUTONS; i++) { m_tableauBoutons[i]=0; } allerALaPage(0); ///[2] Attribution des secondes images //[2.1] Changement de pages //[2.2] Niveaux (pas besoin, fait dans allerPage()) }///GestionnaireNiveaux() GestionnaireNiveaux::~GestionnaireNiveaux() { ///[1] Nettoyage boutons //[1.1] Changement de pages delete(m_pagePrecedente); delete(m_pageSuivante); //[1.2] Niveaux reinitialiserPage(); }///~GestionnaireNiveaux() void GestionnaireNiveaux::calculer(int const xSouris, int const ySouris) { bool selectOk(false);//Rien de selectionné for (int i(0); i<NB_BOUTONS; i++) { if (m_tableauBoutons[i]->calculer(xSouris,ySouris)) { m_font=m_apercu[i]; selectOk=true; } } if (!selectOk)//Rien de selectionné ! m_font=0; }///calculer(int const xSouris, int const ySouris) void GestionnaireNiveaux::afficher() { ///[1] Affichage des boutons //[1.0] Font if (m_font!=0) SDL_BlitSurface(m_font,0,m_screen,0); //[1.1] Changeurs de pages m_pagePrecedente->afficher(); m_pageSuivante->afficher(); //[1.2] Niveaux for (int i(0); i<NB_BOUTONS; i++) { m_tableauBoutons[i]->afficher(); } }///afficher(SDL_Surface* screen) void GestionnaireNiveaux::clic(int const xSouris, int const ySouris) { ///Teste tous les boutons, si un bouton est cliqué, ///appelez nomDuFichier puis modifier m_choixJoueur et m_estChoisi //[1] Test du tableau de boutons for (Uint8 i(0); i<NB_BOUTONS; i++) { if (m_tableauBoutons[i]->estClique(xSouris,ySouris)) { std::cout << "Clic, niveau choisi: " << nomDuFichier(i) << std::endl; if (m_apercu[i]!=0) { m_estChoisi=true; m_choixJoueur=nomDuFichier(i); } else std::cout << nomDuFichier(i) << " n'existe pas. Reste au menu. " << std::endl; } } //[2] Tests des boutons de chgmt de page if (m_pageSuivante->estClique(xSouris,ySouris)) allerALaPage(m_pageActuelle+1); else if (m_pagePrecedente->estClique(xSouris,ySouris) && m_pageActuelle>0) allerALaPage(m_pageActuelle-1); }///clic(int const xSouris, int const ySouris) bool GestionnaireNiveaux::estChoisi() { return m_estChoisi; }///estChoisi() std::string GestionnaireNiveaux::getChoix() { return m_choixJoueur; }///getChoix() /**---------------------------------FONCTIONS INTERNES---------------------------------**/ void GestionnaireNiveaux::reinitialiserPage() { for (int i(0); i<NB_BOUTONS; i++) { //[1] Nettoyage boutons if (m_tableauBoutons[i]!=0) delete m_tableauBoutons[i]; m_tableauBoutons[i]=0; //[2] Nettoyage aperçus if (m_apercu[i]!=0) SDL_FreeSurface(m_apercu[i]); m_apercu[i]=0; } }///reinitialiserPage() void GestionnaireNiveaux::allerALaPage(Uint32 numeroPage) { //[0] Sécurité: if (m_tableauBoutons[0]!=0) reinitialiserPage(); //[1] Changement de page, toute ! m_pageActuelle=numeroPage; //[2] Chargement des images !!! SDL_Surface* apparence[NB_BOUTONS]; for (int i(0); i<NB_BOUTONS; i++) { apparence[i]=SDL_LoadBMP("Images/boutonLevel.bmp"); } SDL_Surface* surbrillance[NB_BOUTONS]; for (int i(0); i<NB_BOUTONS; i++) { surbrillance[i]=SDL_LoadBMP("Images/boutonLevelB.bmp"); } //[2bis] Chargement des textes et aperçus ! std::string nomNiveau[NB_BOUTONS]; std::string ajout; Niveau maquette; for (int i(0); i<NB_BOUTONS; i++) { if (!maquette.creer(nomDuFichier(i)))//Niveau inexistant { nomNiveau[i]="NO_LVL"; m_apercu[i]=0; } else { ajout=convertirEntierEnCaracteres(m_pageActuelle*NB_BOUTONS+i+1); nomNiveau[i]="Level "+ajout+" "+maquette.getNom(); m_apercu[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,600,600,16,0,0,0,0); maquette.afficher(m_apercu[i]); } } //[3] Collage des textes ! SDL_Surface* texte[NB_BOUTONS]; SDL_Rect position; position.x=20; position.y=4; SDL_Rect positionB; positionB.x=position.x+2; positionB.y=position.y+1; SDL_Color bleu={0,0,200}; for (int i(0); i<NB_BOUTONS; i++) { texte[i]=transform(nomNiveau[i],25,bleu); SDL_BlitSurface(texte[i], 0, apparence[i], &position); SDL_BlitSurface(texte[i], 0, surbrillance[i], &positionB); } //[4] Création des boutons !!! int y(80); int x(300-276-7); for (int i(0); i<NB_BOUTONS; i++) { if (i==8)//Deuxième colonne ! { x=300+7; y=80; } m_tableauBoutons[i]=new Bouton(apparence[i], m_screen, x, y); y+=38+16; m_tableauBoutons[i]->attribuerImg(surbrillance[i]); } //[5] On nettoie les déchets for (int i(0); i<NB_BOUTONS; i++) { SDL_FreeSurface(texte[i]); } }///allerALaPage(Uint32 numeroPage) std::string GestionnaireNiveaux::nomDuFichier(Uint8 IDTab) { //[1] Quel niveau selectionné ? int numLvl; numLvl=m_pageActuelle*NB_BOUTONS+IDTab+1; //[2] Renvoi return "level "+convertirEntierEnCaracteres(numLvl)+".txt"; }///nomDuFichier(Uint8 IDTab)