123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- #include "gestionnaireNiveaux.h"
- GestionnaireNiveaux::GestionnaireNiveaux(SDL_Surface *screen):
- m_pageActuelle(0),m_estChoisi(false),m_choixJoueur("nothings"),m_screen(screen)
- {
- ///[1] Création des boutons
- //[1.1] Changement de pages
- m_pagePrecedente = new Bouton(SDL_LoadBMP("Images/gauche.bmp"), screen, 320-154, 440);
- m_pageSuivante = new Bouton(SDL_LoadBMP("Images/droite.bmp"), screen, 320, 440);
- //[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 seelctionné !
- m_font=0;
- }///calculer(int const xSouris, int const ySouris)
- void GestionnaireNiveaux::afficher()
- {
- ///[1] Affichage des boutons
- //[1.0] Font
- SDL_Rect positionZero;
- positionZero.x=positionZero.y=0;
- if (m_font!=0)
- SDL_BlitSurface(m_font,0,m_screen,&positionZero);
- //[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];
- Level* maquette(0);
- std::string ajout;
- for (int i(0); i<NB_BOUTONS; i++)
- {
- maquette=haveLevel(nomDuFichier(i));
- if (maquette==0)//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,640,480,16,0,0,0,0);
- maquette->afficher(m_apercu[i]);
- SDL_SetColorKey(m_apercu[i],SDL_SRCCOLORKEY,SDL_MapRGB(m_apercu[i]->format,0,0,0));
- delete maquette;
- }
- }
- //[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(320-276-7);
- for (int i(0); i<NB_BOUTONS; i++)
- {
- if (i==8)//Deuxième colonne !
- {
- x=320+7;
- y=80;
- }
- m_tableauBoutons[i]=new Bouton(apparence[i], m_screen, x, y);
- y+=38+5;
- 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*8+IDTab+1;
- //[2] Renvoi
- return "level "+convertirEntierEnCaracteres(numLvl)+".txt";
- }///nomDuFichier(Uint8 IDTab)
|