eventLoop.cpp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "eventLoop.h"
  2. int eventLoop(SDL_Surface* ecran)
  3. {
  4. int check(0);//Variable d'erreur; 0=Ok, -1=probleme
  5. // Charges des images
  6. SDL_Surface* mort = SDL_LoadBMP("Images/GameOver.bmp");
  7. SDL_SetColorKey(mort,SDL_SRCCOLORKEY,SDL_MapRGB(mort->format,0,255,255));
  8. Joueur joueur(ecran);
  9. joueur.setArme("Baroudeur");
  10. Bouton iconeOne(0,0,0,"Baroudeur", ecran, &joueur);//Précédent 0/404
  11. Bouton iconeTwo(0,76,1,"Usiane", ecran, &joueur);//Précédent 140/404
  12. Bouton iconeThree(0,152,2,"Triphaseur", ecran, &joueur);//Précédent 280/404
  13. ChampDeBataille arena(&joueur,ecran,10);
  14. if (!mort)//Recherche d'erreurs
  15. {
  16. printf("Unable to load bitmap: %s\n", SDL_GetError());
  17. check=-1;
  18. return check;
  19. }
  20. // Coordonnées des surfaces
  21. SDL_Rect position;
  22. position.x = 0;
  23. position.y = 0;
  24. //Mise au point du tir sans répétition due à la mémoire de l'evenement.
  25. bool latence(true);
  26. // program main loop
  27. bool done = false;
  28. SDL_ShowCursor(SDL_DISABLE);
  29. //Gérance du temps
  30. int tempsPrecedent(0);
  31. int tempsActuel(0);
  32. while (!done && optionsFire::continuer)
  33. {
  34. // message processing loop
  35. SDL_Event event;
  36. SDL_PollEvent(&event);
  37. // activation du fps (fréquence à 50Hz)
  38. tempsActuel=SDL_GetTicks();
  39. if (tempsActuel-tempsPrecedent>20)
  40. {//Fps
  41. // check for messages
  42. switch (event.type)
  43. {
  44. // exit if the window is closed
  45. case SDL_QUIT:
  46. optionsFire::continuer=false;
  47. done = true;
  48. break;
  49. case SDL_KEYDOWN:
  50. switch(event.key.keysym.sym)
  51. {
  52. case SDLK_ESCAPE:
  53. done = true;
  54. break;
  55. case SDLK_b:
  56. joueur.setArme("Baroudeur");
  57. break;
  58. case SDLK_u:
  59. joueur.setArme("Usiane");
  60. break;
  61. case SDLK_t:
  62. joueur.setArme("Triphaseur");
  63. break;
  64. }
  65. break;
  66. case SDL_MOUSEMOTION:
  67. joueur.giveMousePosition(event.motion.x,event.motion.y);
  68. break;
  69. case SDL_MOUSEBUTTONDOWN:
  70. switch (event.button.button)
  71. {
  72. case SDL_BUTTON_LEFT:
  73. if(latence==true)
  74. {
  75. Cliquable::getFire(event.button.x,event.button.y,joueur.getTypeWeapon());
  76. joueur.tir();
  77. }
  78. latence=false;//Empeche de tirer en continu.
  79. break;
  80. }//SDL_MOUSEBUTTONDOWN
  81. break;
  82. case SDL_MOUSEBUTTONUP:
  83. switch (event.button.button)
  84. {
  85. case SDL_BUTTON_LEFT:
  86. latence=true;
  87. break;
  88. }
  89. } //EVENT end switch event loop
  90. // DRAWING STARTS HERE
  91. // clear screen
  92. SDL_FillRect(ecran, 0, SDL_MapRGB(ecran->format, 0, 0, 0));
  93. // draw bitmap
  94. SDL_BlitSurface(optionsFire::level, 0, ecran, &position);
  95. //Gestion du temps
  96. tempsActuel=tempsPrecedent;
  97. if (joueur.estVivant())
  98. {
  99. iconeOne.afficher();
  100. iconeTwo.afficher();
  101. iconeThree.afficher();
  102. arena.afficher();
  103. joueur.afficher();
  104. }
  105. else
  106. {
  107. SDL_BlitSurface(mort, 0, ecran, &position);
  108. SDL_ShowCursor(SDL_ENABLE);
  109. }
  110. // DRAWING ENDS HERE
  111. Cliquable::upFire();
  112. }//End fps
  113. // finally, update the screen :)
  114. SDL_Flip(ecran);
  115. } //MAIN end main loop
  116. // free loaded bitmap
  117. SDL_FreeSurface(optionsFire::level);//Fond
  118. optionsFire::level=0;//On pointe le pointeur sur lui, pour la securité
  119. return check;
  120. }