Sauvegarde des events pour sous-traitement des vues

This commit is contained in:
Mattéo Delabre 2016-04-04 19:53:54 +02:00
parent 388decc3b6
commit 462656e99a
2 changed files with 17 additions and 15 deletions

View File

@ -15,7 +15,7 @@ private:
sf::Clock clock; sf::Clock clock;
ResourceManager resource_manager; ResourceManager resource_manager;
std::array<bool, sf::Keyboard::KeyCount> keys; std::vector<sf::Event> events;
std::shared_ptr<View> view; std::shared_ptr<View> view;
@ -47,6 +47,12 @@ public:
*/ */
ResourceManager& getResourceManager(); ResourceManager& getResourceManager();
/**
* Renvoie la liste des événements reçus pour la
* précédente frame
*/
const std::vector<sf::Event>& getEvents();
/** /**
* Renvoie un booléen attestant de l'appui sur la * Renvoie un booléen attestant de l'appui sur la
* touche donnée ou non * touche donnée ou non

View File

@ -3,13 +3,12 @@
Manager::Manager() : window( Manager::Manager() : window(
sf::VideoMode(704, 480), "Projet CMI", sf::Style::Default, sf::VideoMode(704, 480), "Projet CMI", sf::Style::Default,
sf::ContextSettings(0, 0, 2) sf::ContextSettings(0, 0, 2)
), view(NULL) { ), view(NULL) {}
keys.fill(false);
}
void Manager::start() { void Manager::start() {
while (window.isOpen()) { while (window.isOpen()) {
sf::Event event; sf::Event event;
events.clear();
// traitement des évènements reçus // traitement des évènements reçus
while (window.pollEvent(event)) { while (window.pollEvent(event)) {
@ -19,21 +18,14 @@ void Manager::start() {
return; 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 // lorsque la fenêtre est redimensionnée par l'utilisateur
if (event.type == sf::Event::Resized) { if (event.type == sf::Event::Resized) {
// mise à jour de la caméra en fonction de la taille de la fenêtre // 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); sf::FloatRect visibleArea(0, 0, event.size.width, event.size.height);
window.setView(sf::View(visibleArea)); window.setView(sf::View(visibleArea));
} }
events.push_back(event);
} }
// demande à la vue de se mettre à jour sur // demande à la vue de se mettre à jour sur
@ -62,6 +54,10 @@ ResourceManager& Manager::getResourceManager() {
return resource_manager; return resource_manager;
} }
bool Manager::isKeyPressed(sf::Keyboard::Key key) const { const std::vector<sf::Event>& Manager::getEvents() {
return keys[key]; return events;
}
bool Manager::isKeyPressed(sf::Keyboard::Key key) const {
return sf::Keyboard::isKeyPressed(key) && window.hasFocus();
} }