Input.cpp 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "Input.h"
  2. // Constructeur et Destructeur
  3. Input::Input()
  4. : m_x(0), m_y(0), m_xRel(0), m_yRel(0),
  5. m_terminer(false), m_relativeMouse(false), m_windowHalfHeight(0), m_windowHalfWidth(0)
  6. {
  7. // Initialisation du tableau m_touches[]
  8. for(int i(0); i < SDLK_LAST; i++)
  9. m_touches[i] = false;
  10. std::cout << "Il y a "<<SDLK_LAST<<" touches sur le clavier."<<std::endl;
  11. // Initialisation du tableau m_boutonsSouris[]
  12. for(int i(0); i < 8; i++)
  13. m_boutonsSouris[i] = false;
  14. }
  15. Input::~Input()
  16. {}
  17. // Méthodes
  18. void Input::updateEvenements()
  19. {
  20. // Pour éviter des mouvements fictifs de la souris, on réinitialise les coordonnées relatives
  21. m_xRel = 0;
  22. m_yRel = 0;
  23. // Boucle d'évènements
  24. while(SDL_PollEvent(&m_evenements))
  25. {
  26. // Switch sur le type d'évènement
  27. switch(m_evenements.type)
  28. {
  29. // Cas d'une touche enfoncée
  30. case SDL_KEYDOWN:
  31. m_touches[m_evenements.key.keysym.sym] = true;
  32. break;
  33. // Cas d'une touche relâchée
  34. case SDL_KEYUP:
  35. m_touches[m_evenements.key.keysym.sym] = false;
  36. break;
  37. // Cas de pression sur un bouton de la souris
  38. case SDL_MOUSEBUTTONDOWN:
  39. m_boutonsSouris[m_evenements.button.button] = true;
  40. break;
  41. // Cas du relâchement d'un bouton de la souris
  42. case SDL_MOUSEBUTTONUP:
  43. m_boutonsSouris[m_evenements.button.button] = false;
  44. break;
  45. // Cas d'un mouvement de souris
  46. case SDL_MOUSEMOTION:
  47. if (m_relativeMouse)
  48. {
  49. m_xRel = m_evenements.motion.x-m_windowHalfWidth;
  50. m_yRel = m_evenements.motion.y-m_windowHalfHeight;
  51. }
  52. else
  53. {
  54. m_x = m_evenements.motion.x;
  55. m_y = m_evenements.motion.y;
  56. m_xRel = m_evenements.motion.xrel;
  57. m_yRel = m_evenements.motion.yrel;
  58. }
  59. break;
  60. // Cas de la fermeture de la fenêtre
  61. case SDL_QUIT:
  62. m_terminer = true;
  63. break;
  64. // Les autres ne nous interessent pas : on évite de faire râler g++
  65. default:
  66. break;
  67. }
  68. }
  69. // Pour éviter que la souris se barre en mode relative, on la "warp"
  70. if (m_relativeMouse)
  71. SDL_WarpMouse(m_windowHalfWidth, m_windowHalfHeight);
  72. }
  73. bool Input::terminer() const
  74. {
  75. return m_terminer;
  76. }
  77. void Input::afficherPointeur(bool reponse) const
  78. {
  79. if(reponse)
  80. SDL_ShowCursor(SDL_ENABLE);
  81. else
  82. SDL_ShowCursor(SDL_DISABLE);
  83. }
  84. void Input::capturerPointeur(bool reponse)
  85. {
  86. m_relativeMouse = reponse;
  87. }
  88. // Getters
  89. bool Input::getTouche(const int touche) const
  90. {
  91. return m_touches[touche];
  92. }
  93. bool Input::getBoutonSouris(const Uint8 bouton) const
  94. {
  95. return m_boutonsSouris[bouton];
  96. }
  97. bool Input::mouvementSouris() const
  98. {
  99. if(m_xRel == 0 && m_yRel == 0)
  100. return false;
  101. else
  102. return true;
  103. }
  104. // Getters concernant la position du curseur
  105. int Input::getX() const
  106. {
  107. return m_x;
  108. }
  109. int Input::getY() const
  110. {
  111. return m_y;
  112. }
  113. int Input::getXRel() const
  114. {
  115. return m_xRel;
  116. }
  117. int Input::getYRel() const
  118. {
  119. return m_yRel;
  120. }
  121. void Input::placerPtr(SDL_Surface* activWindow)
  122. {
  123. // Détermination de l'endroit de capture du pointeur
  124. m_windowHalfWidth = activWindow->w / 2;
  125. m_windowHalfHeight = activWindow->h / 2;
  126. }
  127. int Input::getWinHalfH()
  128. {
  129. return m_windowHalfHeight;
  130. }
  131. int Input::getWinHalfW()
  132. {
  133. return m_windowHalfWidth;
  134. }