gestionnaireNiveaux.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. #include "gestionnaireNiveaux.h"
  2. GestionnaireNiveaux::GestionnaireNiveaux(SDL_Surface *screen):
  3. m_pageActuelle(0),m_estChoisi(false),m_choixJoueur("nothings"),m_screen(screen), m_font(0), m_pagePrecedente(0), m_pageSuivante(0)
  4. {
  5. ///[1] Création des boutons
  6. //[1.1] Changement de pages
  7. m_pagePrecedente = new Bouton(SDL_LoadBMP("Images/gauche.bmp"), screen, 300-154, 560);
  8. m_pageSuivante = new Bouton(SDL_LoadBMP("Images/droite.bmp"), screen, 300, 560);
  9. //[1.2] Niveaux
  10. for (int i(0); i<NB_BOUTONS; i++)
  11. {
  12. m_tableauBoutons[i]=0;
  13. }
  14. allerALaPage(0);
  15. ///[2] Attribution des secondes images
  16. //[2.1] Changement de pages
  17. //[2.2] Niveaux (pas besoin, fait dans allerPage())
  18. }///GestionnaireNiveaux()
  19. GestionnaireNiveaux::~GestionnaireNiveaux()
  20. {
  21. ///[1] Nettoyage boutons
  22. //[1.1] Changement de pages
  23. delete(m_pagePrecedente);
  24. delete(m_pageSuivante);
  25. //[1.2] Niveaux
  26. reinitialiserPage();
  27. }///~GestionnaireNiveaux()
  28. void GestionnaireNiveaux::calculer(int const xSouris, int const ySouris)
  29. {
  30. bool selectOk(false);//Rien de selectionné
  31. for (int i(0); i<NB_BOUTONS; i++)
  32. {
  33. if (m_tableauBoutons[i]->calculer(xSouris,ySouris))
  34. {
  35. m_font=m_apercu[i];
  36. selectOk=true;
  37. }
  38. }
  39. if (!selectOk)//Rien de selectionné !
  40. m_font=0;
  41. }///calculer(int const xSouris, int const ySouris)
  42. void GestionnaireNiveaux::afficher()
  43. {
  44. ///[1] Affichage des boutons
  45. //[1.0] Font
  46. if (m_font!=0)
  47. SDL_BlitSurface(m_font,0,m_screen,0);
  48. //[1.1] Changeurs de pages
  49. m_pagePrecedente->afficher();
  50. m_pageSuivante->afficher();
  51. //[1.2] Niveaux
  52. for (int i(0); i<NB_BOUTONS; i++)
  53. {
  54. m_tableauBoutons[i]->afficher();
  55. }
  56. }///afficher(SDL_Surface* screen)
  57. void GestionnaireNiveaux::clic(int const xSouris, int const ySouris)
  58. {
  59. ///Teste tous les boutons, si un bouton est cliqué,
  60. ///appelez nomDuFichier puis modifier m_choixJoueur et m_estChoisi
  61. //[1] Test du tableau de boutons
  62. for (Uint8 i(0); i<NB_BOUTONS; i++)
  63. {
  64. if (m_tableauBoutons[i]->estClique(xSouris,ySouris))
  65. {
  66. std::cout << "Clic, niveau choisi: " << nomDuFichier(i) << std::endl;
  67. if (m_apercu[i]!=0)
  68. {
  69. m_estChoisi=true;
  70. m_choixJoueur=nomDuFichier(i);
  71. }
  72. else
  73. std::cout << nomDuFichier(i) << " n'existe pas. Reste au menu. " << std::endl;
  74. }
  75. }
  76. //[2] Tests des boutons de chgmt de page
  77. if (m_pageSuivante->estClique(xSouris,ySouris))
  78. allerALaPage(m_pageActuelle+1);
  79. else if (m_pagePrecedente->estClique(xSouris,ySouris) && m_pageActuelle>0)
  80. allerALaPage(m_pageActuelle-1);
  81. }///clic(int const xSouris, int const ySouris)
  82. bool GestionnaireNiveaux::estChoisi()
  83. {
  84. return m_estChoisi;
  85. }///estChoisi()
  86. std::string GestionnaireNiveaux::getChoix()
  87. {
  88. return m_choixJoueur;
  89. }///getChoix()
  90. /**---------------------------------FONCTIONS INTERNES---------------------------------**/
  91. void GestionnaireNiveaux::reinitialiserPage()
  92. {
  93. for (int i(0); i<NB_BOUTONS; i++)
  94. {
  95. //[1] Nettoyage boutons
  96. if (m_tableauBoutons[i]!=0)
  97. delete m_tableauBoutons[i];
  98. m_tableauBoutons[i]=0;
  99. //[2] Nettoyage aperçus
  100. if (m_apercu[i]!=0)
  101. SDL_FreeSurface(m_apercu[i]);
  102. m_apercu[i]=0;
  103. }
  104. }///reinitialiserPage()
  105. void GestionnaireNiveaux::allerALaPage(Uint32 numeroPage)
  106. {
  107. //[0] Sécurité:
  108. if (m_tableauBoutons[0]!=0)
  109. reinitialiserPage();
  110. //[1] Changement de page, toute !
  111. m_pageActuelle=numeroPage;
  112. //[2] Chargement des images !!!
  113. SDL_Surface* apparence[NB_BOUTONS];
  114. for (int i(0); i<NB_BOUTONS; i++)
  115. {
  116. apparence[i]=SDL_LoadBMP("Images/boutonLevel.bmp");
  117. }
  118. SDL_Surface* surbrillance[NB_BOUTONS];
  119. for (int i(0); i<NB_BOUTONS; i++)
  120. {
  121. surbrillance[i]=SDL_LoadBMP("Images/boutonLevelB.bmp");
  122. }
  123. //[2bis] Chargement des textes et aperçus !
  124. std::string nomNiveau[NB_BOUTONS];
  125. std::string ajout;
  126. Niveau maquette;
  127. for (int i(0); i<NB_BOUTONS; i++)
  128. {
  129. if (!maquette.creer(nomDuFichier(i)))//Niveau inexistant
  130. {
  131. nomNiveau[i]="NO_LVL";
  132. m_apercu[i]=0;
  133. }
  134. else
  135. {
  136. ajout=convertirEntierEnCaracteres(m_pageActuelle*NB_BOUTONS+i+1);
  137. nomNiveau[i]="Level "+ajout+" "+maquette.getNom();
  138. m_apercu[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,600,600,16,0,0,0,0);
  139. maquette.afficher(m_apercu[i]);
  140. }
  141. }
  142. //[3] Collage des textes !
  143. SDL_Surface* texte[NB_BOUTONS];
  144. SDL_Rect position;
  145. position.x=20;
  146. position.y=4;
  147. SDL_Rect positionB;
  148. positionB.x=position.x+2;
  149. positionB.y=position.y+1;
  150. SDL_Color bleu={0,0,200};
  151. for (int i(0); i<NB_BOUTONS; i++)
  152. {
  153. texte[i]=transform(nomNiveau[i],25,bleu);
  154. SDL_BlitSurface(texte[i], 0, apparence[i], &position);
  155. SDL_BlitSurface(texte[i], 0, surbrillance[i], &positionB);
  156. }
  157. //[4] Création des boutons !!!
  158. int y(80);
  159. int x(300-276-7);
  160. for (int i(0); i<NB_BOUTONS; i++)
  161. {
  162. if (i==8)//Deuxième colonne !
  163. {
  164. x=300+7;
  165. y=80;
  166. }
  167. m_tableauBoutons[i]=new Bouton(apparence[i], m_screen, x, y);
  168. y+=38+16;
  169. m_tableauBoutons[i]->attribuerImg(surbrillance[i]);
  170. }
  171. //[5] On nettoie les déchets
  172. for (int i(0); i<NB_BOUTONS; i++)
  173. {
  174. SDL_FreeSurface(texte[i]);
  175. }
  176. }///allerALaPage(Uint32 numeroPage)
  177. std::string GestionnaireNiveaux::nomDuFichier(Uint8 IDTab)
  178. {
  179. //[1] Quel niveau selectionné ?
  180. int numLvl;
  181. numLvl=m_pageActuelle*NB_BOUTONS+IDTab+1;
  182. //[2] Renvoi
  183. return "level "+convertirEntierEnCaracteres(numLvl)+".txt";
  184. }///nomDuFichier(Uint8 IDTab)