diff --git a/include/manager.hpp b/include/manager.hpp index 13ec34d..be28741 100644 --- a/include/manager.hpp +++ b/include/manager.hpp @@ -15,7 +15,7 @@ private: sf::Clock clock; ResourceManager resource_manager; - std::array keys; + std::vector events; std::shared_ptr view; @@ -47,6 +47,12 @@ public: */ ResourceManager& getResourceManager(); + /** + * Renvoie la liste des événements reçus pour la + * précédente frame + */ + const std::vector& getEvents(); + /** * Renvoie un booléen attestant de l'appui sur la * touche donnée ou non diff --git a/src/manager.cpp b/src/manager.cpp index f05da87..da216ab 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -3,13 +3,12 @@ Manager::Manager() : window( sf::VideoMode(704, 480), "Projet CMI", sf::Style::Default, sf::ContextSettings(0, 0, 2) -), view(NULL) { - keys.fill(false); -} +), view(NULL) {} void Manager::start() { while (window.isOpen()) { sf::Event event; + events.clear(); // traitement des évènements reçus while (window.pollEvent(event)) { @@ -19,21 +18,14 @@ void Manager::start() { return; } - // suivi de l'enfoncement et du relâchement des touches - if (event.type == sf::Event::KeyPressed) { - keys[event.key.code] = true; - } - - if (event.type == sf::Event::KeyReleased) { - keys[event.key.code] = false; - } - // lorsque la fenêtre est redimensionnée par l'utilisateur if (event.type == sf::Event::Resized) { // mise à jour de la caméra en fonction de la taille de la fenêtre sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height); window.setView(sf::View(visibleArea)); } + + events.push_back(event); } // demande à la vue de se mettre à jour sur @@ -62,6 +54,10 @@ ResourceManager& Manager::getResourceManager() { return resource_manager; } -bool Manager::isKeyPressed(sf::Keyboard::Key key) const { - return keys[key]; +const std::vector& Manager::getEvents() { + return events; +} + +bool Manager::isKeyPressed(sf::Keyboard::Key key) const { + return sf::Keyboard::isKeyPressed(key) && window.hasFocus(); }