eventLoop.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. SDL_Event event;
  32. while (!done && optionsFire::continuer)
  33. {
  34. // activation du fps (fréquence à 50Hz)
  35. tempsPrecedent = SDL_GetTicks();
  36. if (SDL_GetTicks() - tempsPrecedent < 20)
  37. SDL_Delay(15 + tempsPrecedent - SDL_GetTicks());
  38. while (SDL_GetTicks() - tempsPrecedent < 20); // Block until next frame
  39. // message processing loop
  40. while(SDL_PollEvent(&event))
  41. {
  42. // check for messages
  43. switch (event.type)
  44. {
  45. // exit if the window is closed
  46. case SDL_QUIT:
  47. optionsFire::continuer = false;
  48. done = true;
  49. break;
  50. case SDL_KEYDOWN:
  51. switch(event.key.keysym.sym)
  52. {
  53. case SDLK_ESCAPE:
  54. done = true;
  55. break;
  56. case SDLK_b:
  57. joueur.setArme("Baroudeur");
  58. break;
  59. case SDLK_u:
  60. joueur.setArme("Usiane");
  61. break;
  62. case SDLK_t:
  63. joueur.setArme("Triphaseur");
  64. break;
  65. }
  66. break;
  67. case SDL_MOUSEMOTION:
  68. joueur.giveMousePosition(event.motion.x,event.motion.y);
  69. break;
  70. case SDL_MOUSEBUTTONDOWN:
  71. switch (event.button.button)
  72. {
  73. case SDL_BUTTON_LEFT:
  74. if(latence == true)
  75. {
  76. Cliquable::getFire(event.button.x,event.button.y,joueur.getTypeWeapon());
  77. joueur.tir();
  78. }
  79. latence = false;//Empeche de tirer en continu.
  80. break;
  81. }//SDL_MOUSEBUTTONDOWN
  82. break;
  83. case SDL_MOUSEBUTTONUP:
  84. switch (event.button.button)
  85. {
  86. case SDL_BUTTON_LEFT:
  87. latence = true;
  88. break;
  89. }
  90. }
  91. } //EVENT end switch event loop
  92. // DRAWING STARTS HERE
  93. // clear screen
  94. SDL_FillRect(ecran, 0, SDL_MapRGB(ecran->format, 0, 0, 0));
  95. // draw bitmap
  96. SDL_BlitSurface(optionsFire::level, 0, ecran, &position);
  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. // finally, update the screen :)
  113. SDL_Flip(ecran);
  114. } //MAIN end main loop
  115. // free loaded bitmap
  116. SDL_FreeSurface(optionsFire::level);//Fond
  117. optionsFire::level = 0;//On pointe le pointeur sur lui, pour la securité
  118. return check;
  119. }