123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- #include "Input.h"
- // Constructeur et Destructeur
- Input::Input()
- : m_x(0), m_y(0), m_xRel(0), m_yRel(0),
- m_avancer(SDL_SCANCODE_UP), m_reculer(SDL_SCANCODE_DOWN), m_droite(SDL_SCANCODE_RIGHT), m_gauche(SDL_SCANCODE_LEFT),
- m_terminer(false), m_relativeMouse(false), m_window(0), m_windowHalfHeight(0), m_windowHalfWidth(0)
- {
- // Initialisation du tableau m_touches[]
- for(int i(0); i < SDL_NUM_SCANCODES; i++)
- m_touches[i] = false;
- // Initialisation du tableau m_boutonsSouris[]
- for(int i(0); i < 8; i++)
- m_boutonsSouris[i] = false;
- }
- Input::~Input()
- {}
- // Méthodes
- void Input::updateEvenements()
- {
- // Pour éviter des mouvements fictifs de la souris, on réinitialise les coordonnées relatives
- m_xRel = 0;
- m_yRel = 0;
- // Boucle d'évènements
- while(SDL_PollEvent(&m_evenements))
- {
- // Switch sur le type d'évènement
- switch(m_evenements.type)
- {
- // Cas d'une touche enfoncée
- case SDL_KEYDOWN:
- m_touches[m_evenements.key.keysym.scancode] = true;
- break;
- // Cas d'une touche relâchée
- case SDL_KEYUP:
- m_touches[m_evenements.key.keysym.scancode] = false;
- break;
- // Cas de pression sur un bouton de la souris
- case SDL_MOUSEBUTTONDOWN:
- m_boutonsSouris[m_evenements.button.button] = true;
- break;
- // Cas du relâchement d'un bouton de la souris
- case SDL_MOUSEBUTTONUP:
- m_boutonsSouris[m_evenements.button.button] = false;
- break;
- // Cas d'un mouvement de souris
- case SDL_MOUSEMOTION:
- if (m_relativeMouse)
- {
- m_xRel = m_evenements.motion.x-m_windowHalfWidth;
- m_yRel = m_evenements.motion.y-m_windowHalfHeight;
- }
- else
- {
- m_x = m_evenements.motion.x;
- m_y = m_evenements.motion.y;
- m_xRel = m_evenements.motion.xrel;
- m_yRel = m_evenements.motion.yrel;
- }
- break;
- // Cas de la fermeture de la fenêtre
- case SDL_WINDOWEVENT:
- if(m_evenements.window.event == SDL_WINDOWEVENT_CLOSE)
- m_terminer = true;
- break;
- default:
- break;
- }
- }
- // Pour éviter que la souris se barre en mode relative, on la "warp"
- if (m_relativeMouse)
- SDL_WarpMouseInWindow(m_window,m_windowHalfWidth,m_windowHalfHeight);
- }
- bool Input::terminer() const
- {
- return m_terminer;
- }
- void Input::afficherPointeur(bool reponse) const
- {
- if(reponse)
- SDL_ShowCursor(SDL_ENABLE);
- else
- SDL_ShowCursor(SDL_DISABLE);
- }
- void Input::capturerPointeur(bool reponse)
- {
- m_relativeMouse = reponse;
- }
- // Getters
- bool Input::getTouche(const SDL_Scancode touche) const
- {
- return m_touches[touche];
- }
- bool Input::getBoutonSouris(const Uint8 bouton) const
- {
- return m_boutonsSouris[bouton];
- }
- bool Input::mouvementSouris() const
- {
- if(m_xRel == 0 && m_yRel == 0)
- return false;
- else
- return true;
- }
- // Getters concernant la position du curseur
- int Input::getX() const
- {
- return m_x;
- }
- int Input::getY() const
- {
- return m_y;
- }
- int Input::getXRel() const
- {
- return m_xRel;
- }
- int Input::getYRel() const
- {
- return m_yRel;
- }
- void Input::setWindow(SDL_Window* activWindow)
- {
- // Attributio directe
- m_window = activWindow;
- // Détermination de l'endroit de capture du pointeur
- SDL_GetWindowSize(activWindow, &m_windowHalfWidth, &m_windowHalfHeight);
- m_windowHalfWidth /= 2;
- m_windowHalfHeight /=2;
- }
- void Input::setMoveKeys(SDL_Scancode avancer, SDL_Scancode reculer, SDL_Scancode droite, SDL_Scancode gauche)
- {
- m_avancer = avancer;
- m_reculer = reculer;
- m_droite = droite;
- m_gauche = gauche;
- }
- float Input::getMainXRel() const
- {
- return (float) m_xRel;
- }
- float Input::getMainYRel() const
- {
- return (float) m_yRel;
- }
- float Input::getMainXMove() const
- {
- // Avancée de la caméra
- if(getTouche(m_avancer))
- {
- return -1.0;
- }
- // Recul de la caméra
- if(getTouche(m_reculer))
- {
- return 1.0;
- }
- // Caméra immobile
- return 0.0;
- }
- float Input::getMainYMove() const
- {
- // Déplacement vers la gauche
- if(getTouche(m_gauche))
- {
- return -1.0;
- }
- // Déplacement vers la droite
- if(getTouche(m_droite))
- {
- return 1.0;
- }
- // Caméra immobile
- return 0.0;
- }
|