Input.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include "Input.h"
  2. // Constructeur et Destructeur
  3. Input::Input() : m_x(0), m_y(0), m_xRel(0), m_yRel(0), m_terminer(false)
  4. {
  5. // Initialisation du tableau m_touches[]
  6. for(int i(0); i < SDL_NUM_SCANCODES; i++)
  7. m_touches[i] = false;
  8. // Initialisation du tableau m_boutonsSouris[]
  9. for(int i(0); i < 8; i++)
  10. m_boutonsSouris[i] = false;
  11. }
  12. Input::~Input()
  13. {
  14. }
  15. // Méthodes
  16. void Input::updateEvenements()
  17. {
  18. // Pour éviter des mouvements fictifs de la souris, on réinitialise les coordonnées relatives
  19. m_xRel = 0;
  20. m_yRel = 0;
  21. // Boucle d'évènements
  22. while(SDL_PollEvent(&m_evenements))
  23. {
  24. // Switch sur le type d'évènement
  25. switch(m_evenements.type)
  26. {
  27. // Cas d'une touche enfoncée
  28. case SDL_KEYDOWN:
  29. m_touches[m_evenements.key.keysym.scancode] = true;
  30. break;
  31. // Cas d'une touche relâchée
  32. case SDL_KEYUP:
  33. m_touches[m_evenements.key.keysym.scancode] = false;
  34. break;
  35. // Cas de pression sur un bouton de la souris
  36. case SDL_MOUSEBUTTONDOWN:
  37. m_boutonsSouris[m_evenements.button.button] = true;
  38. break;
  39. // Cas du relâchement d'un bouton de la souris
  40. case SDL_MOUSEBUTTONUP:
  41. m_boutonsSouris[m_evenements.button.button] = false;
  42. break;
  43. // Cas d'un mouvement de souris
  44. case SDL_MOUSEMOTION:
  45. m_x = m_evenements.motion.x;
  46. m_y = m_evenements.motion.y;
  47. m_xRel = m_evenements.motion.xrel;
  48. m_yRel = m_evenements.motion.yrel;
  49. break;
  50. // Cas de la fermeture de la fenêtre
  51. case SDL_WINDOWEVENT:
  52. if(m_evenements.window.event == SDL_WINDOWEVENT_CLOSE)
  53. m_terminer = true;
  54. break;
  55. default:
  56. break;
  57. }
  58. }
  59. }
  60. bool Input::terminer() const
  61. {
  62. return m_terminer;
  63. }
  64. void Input::afficherPointeur(bool reponse) const
  65. {
  66. if(reponse)
  67. SDL_ShowCursor(SDL_ENABLE);
  68. else
  69. SDL_ShowCursor(SDL_DISABLE);
  70. }
  71. void Input::capturerPointeur(bool reponse) const
  72. {
  73. if(reponse)
  74. SDL_SetRelativeMouseMode(SDL_TRUE);
  75. else
  76. SDL_SetRelativeMouseMode(SDL_FALSE);
  77. }
  78. // Getters
  79. bool Input::getTouche(const SDL_Scancode touche) const
  80. {
  81. return m_touches[touche];
  82. }
  83. bool Input::getBoutonSouris(const Uint8 bouton) const
  84. {
  85. return m_boutonsSouris[bouton];
  86. }
  87. bool Input::mouvementSouris() const
  88. {
  89. if(m_xRel == 0 && m_yRel == 0)
  90. return false;
  91. else
  92. return true;
  93. }
  94. // Getters concernant la position du curseur
  95. int Input::getX() const
  96. {
  97. return m_x;
  98. }
  99. int Input::getY() const
  100. {
  101. return m_y;
  102. }
  103. int Input::getXRel() const
  104. {
  105. return m_xRel;
  106. }
  107. int Input::getYRel() const
  108. {
  109. return m_yRel;
  110. }