Joueur.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include "Joueur.h"
  2. Arme::Arme(SDL_Surface* ecran,unsigned int IDarme,int xCalibreExpl,int yCalibreExpl, int recul) : m_ecran(ecran),m_xCalibreExpl(xCalibreExpl),m_yCalibreExpl(yCalibreExpl),m_IDarme(IDarme),m_recul(recul)
  3. {//Constructeur
  4. if (IDarme==0)
  5. {
  6. //Assignation necessaire au baroudeur
  7. m_viseur=SDL_LoadBMP("Images/ViseurBaroudeur.bmp");
  8. m_arme=SDL_LoadBMP("Images/Baroudeur.bmp");
  9. m_tir=SDL_LoadBMP("Images/TirBaroudeur.bmp");
  10. m_impact=SDL_LoadBMP("Images/ImpactBaroudeur.bmp");
  11. m_munitionsRestantes=10;
  12. }
  13. else if (IDarme==1)
  14. {
  15. //Assignation necessaire à l'Usiane
  16. m_viseur=SDL_LoadBMP("Images/ViseurUsiane.bmp");
  17. m_arme=SDL_LoadBMP("Images/Usiane.bmp");
  18. m_tir=SDL_LoadBMP("Images/TirUsiane.bmp");
  19. m_impact=SDL_LoadBMP("Images/ImpactUsiane.bmp");
  20. m_munitionsRestantes=25;
  21. }
  22. else
  23. {
  24. //Assignation néecessaire au triphaseur
  25. m_viseur=SDL_LoadBMP("Images/ViseurTriphaseur.bmp");
  26. m_arme=SDL_LoadBMP("Images/Triphaseur.bmp");
  27. m_tir=SDL_LoadBMP("Images/TirTriphaseur.bmp");
  28. m_impact=SDL_LoadBMP("Images/ImpactTriphaseur.bmp");
  29. m_munitionsRestantes=125;
  30. }
  31. }
  32. Arme::~Arme()
  33. {
  34. SDL_FreeSurface(m_viseur);
  35. SDL_FreeSurface(m_arme);
  36. SDL_FreeSurface(m_tir);
  37. SDL_FreeSurface(m_impact);
  38. }
  39. void Arme::afficher(bool tir, SDL_Rect* positionViseur)//Test du tir pris en charge par le joueur proprio
  40. {
  41. //Traitement transparence
  42. SDL_SetColorKey(m_viseur,SDL_SRCCOLORKEY,SDL_MapRGB(m_viseur->format,255,255,255));//On met le fond (blanc) en invisible !
  43. SDL_SetColorKey(m_tir,SDL_SRCCOLORKEY,SDL_MapRGB(m_tir->format,255,255,255));
  44. SDL_SetColorKey(m_impact,SDL_SRCCOLORKEY,SDL_MapRGB(m_impact->format,255,255,255));
  45. SDL_SetColorKey(m_arme,SDL_SRCCOLORKEY,SDL_MapRGB(m_arme->format,255,255,255));
  46. SDL_SetAlpha(m_viseur,SDL_SRCALPHA,128);//On met le viseur en translucide !
  47. SDL_SetAlpha(m_impact,SDL_SRCALPHA,128);
  48. //Réglage de position
  49. SDL_Rect positionTir;
  50. SDL_Rect positionBrasDroit;
  51. positionBrasDroit.x=430+((positionViseur->x-positionViseur->x%10)/10);//420
  52. positionBrasDroit.y=265+((positionViseur->y-positionViseur->y%20)/20);//260
  53. if (tir && m_munitionsRestantes>0)
  54. {
  55. //Calculs
  56. SDL_Rect positionImpact;
  57. positionTir.x=positionBrasDroit.x+m_xCalibreExpl;//Affichage de l'impact
  58. positionTir.y=positionBrasDroit.y+m_yCalibreExpl;
  59. positionBrasDroit.x=positionBrasDroit.x+m_recul;//Recul
  60. positionBrasDroit.y=positionBrasDroit.y+m_recul;
  61. positionImpact.x=positionViseur->x+16;//Centre sur le viseur
  62. positionImpact.y=positionViseur->y+16;
  63. //Affichage de tir
  64. SDL_BlitSurface(m_impact,0,m_ecran,&positionImpact);
  65. SDL_BlitSurface(m_tir,0,m_ecran,&positionTir);//Collage tir
  66. }
  67. //Affichage défaut
  68. SDL_BlitSurface(m_arme,0,m_ecran,&positionBrasDroit);
  69. SDL_BlitSurface(m_viseur,0,m_ecran,positionViseur);
  70. }
  71. void Arme::tir()
  72. {
  73. //Retrait de muntion
  74. m_munitionsRestantes--;
  75. }
  76. unsigned int Arme::getTypeWeapon()
  77. {
  78. return m_IDarme;
  79. }
  80. /*void Arme::recharger
  81. {
  82. //Pleins de trucs interessants...
  83. }*/
  84. ////////////////////////////////////////////////////////////
  85. ///////////////////////Changement de def////////////////////
  86. ////////////////////////////////////////////////////////////
  87. Joueur::Joueur(SDL_Surface* ecran):m_ecran(ecran),m_armeCycle(0),m_tirInstant(false)
  88. {
  89. m_armeOne=new Arme(ecran,0,80,85,5);
  90. m_armeTwo=new Arme(ecran,1,50,60,2);
  91. m_armeThree=new Arme(ecran,2,70,60,0);
  92. m_interVie=SDL_LoadBMP("Images/InterVie.bmp");
  93. m_positionInterVie.x=420;
  94. m_positionInterVie.y=403;
  95. for (int i(0);i<60;i++)
  96. {
  97. m_jaugeVie[i]=SDL_CreateRGBSurface(SDL_HWSURFACE,29,1,32,0,0,0,0);
  98. SDL_FillRect(m_jaugeVie[i],NULL,SDL_MapRGB(m_ecran->format,255,255-2*i,0));
  99. }
  100. m_variableVie=60;
  101. }
  102. Joueur::~Joueur()//Destructeur
  103. {
  104. delete(m_armeOne);
  105. delete(m_armeTwo);
  106. delete(m_armeThree);
  107. SDL_FreeSurface(m_interVie);
  108. }
  109. void Joueur::afficher()
  110. {
  111. if (m_armeCycle<4)//Si un tir vient d'être effectué
  112. {
  113. m_tirInstant=true;
  114. }
  115. else
  116. {
  117. m_tirInstant=false;
  118. }
  119. m_armeCycle++;
  120. SDL_BlitSurface(m_interVie,0,m_ecran,&m_positionInterVie);
  121. SDL_Rect positionJaugeVie;
  122. positionJaugeVie.x=429;//420+9
  123. positionJaugeVie.y=412;//403+9
  124. for (int i(0); i<m_variableVie; i++)
  125. {
  126. positionJaugeVie.y=472-i;//412+60
  127. SDL_BlitSurface(m_jaugeVie[i],NULL,m_ecran,&positionJaugeVie);
  128. }
  129. m_armeSelect->afficher(m_tirInstant,&m_positionViseur);
  130. }
  131. void Joueur::setArme(std::string choixArme)
  132. {
  133. if (choixArme=="Baroudeur")
  134. {
  135. m_armeSelect=m_armeOne;
  136. }
  137. else if (choixArme=="Usiane")
  138. {
  139. m_armeSelect=m_armeTwo;
  140. }
  141. else if (choixArme=="Triphaseur")
  142. {
  143. m_armeSelect=m_armeThree;
  144. }
  145. }
  146. void Joueur::giveMousePosition(int x, int y)
  147. {
  148. m_positionViseur.x=x-32;
  149. m_positionViseur.y=y-32;
  150. }
  151. void Joueur::tir()
  152. {
  153. m_armeCycle=0;
  154. m_armeSelect->tir();
  155. }
  156. void Joueur::recevoirDegats(int degats)
  157. {
  158. m_variableVie=m_variableVie-degats;
  159. if (m_variableVie<0)
  160. {
  161. m_variableVie=0;
  162. }
  163. }
  164. bool Joueur::estVivant()
  165. {
  166. if (m_variableVie>0)
  167. {
  168. return true;
  169. }
  170. else
  171. {
  172. return false;
  173. }
  174. }
  175. unsigned int Joueur::getTypeWeapon()
  176. {
  177. return m_armeSelect->getTypeWeapon();
  178. }