diff --git a/include/manager.hpp b/include/manager.hpp index 40c1853..a833bea 100644 --- a/include/manager.hpp +++ b/include/manager.hpp @@ -25,6 +25,11 @@ private: bool running; public: + /** + * Énumération des modificateurs + */ + enum class Modifier {CONTROL, ALT, SHIFT, SYSTEM}; + Manager(); /** @@ -82,6 +87,12 @@ public: * touche donnée ou non */ bool isKeyPressed(sf::Keyboard::Key key) const; + + /** + * Renvoie un booléen attestant de l'appui sur le + * modificateur + */ + bool isKeyPressed(Modifier modifier) const; }; #endif diff --git a/include/state.hpp b/include/state.hpp index 401517e..db25b59 100644 --- a/include/state.hpp +++ b/include/state.hpp @@ -4,8 +4,8 @@ #include class ResourceManager; -class Manager; class Object; +class Manager; /** * Classe abstraite pour les états de jeu @@ -38,20 +38,30 @@ public: */ Manager& getManager(); + /** + * Récupère le gestionnaire (version constante) + */ + const Manager& getManager() const; + /** * Récupère le gestionnaire de ressources */ ResourceManager& getResourceManager(); + /** + * Récupère le gestionnaire de ressources (version constante) + */ + const ResourceManager& getResourceManager() const; + /** * Récupère la fenêtre */ sf::RenderWindow& getWindow(); /** - * Récupère si une touche est pressée + * Récupère la fenêtre (version constante) */ - bool isKeyPressed(sf::Keyboard::Key key) const; + const sf::RenderWindow& getWindow() const; }; #endif diff --git a/src/editor.cpp b/src/editor.cpp index 6858f44..e67a413 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -65,7 +65,7 @@ void Editor::processEvent(const sf::Event& event) { if (event.mouseButton.button == sf::Mouse::Left) { // clic + shift : sélection par rectangle de sélection - if (isKeyPressed(sf::Keyboard::LShift)) { + if (getManager().isKeyPressed(Manager::Modifier::SHIFT)) { drag_start = mouse_position; drag_end = mouse_position; drag_mode = DragMode::SELECT_RECT; @@ -73,7 +73,7 @@ void Editor::processEvent(const sf::Event& event) { // clic sur un objet : démarrage de la sélection libre else if (pointed_object != nullptr) { - if (isKeyPressed(sf::Keyboard::LControl)) { + if (getManager().isKeyPressed(Manager::Modifier::CONTROL)) { drag_start = mouse_position; drag_end = mouse_position; drag_mode = DragMode::SELECT_BULK; diff --git a/src/manager.cpp b/src/manager.cpp index 3cc65d3..5500ae5 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -98,3 +98,21 @@ void Manager::setTitle(sf::String set_title) { bool Manager::isKeyPressed(sf::Keyboard::Key key) const { return sf::Keyboard::isKeyPressed(key) && window.hasFocus(); } + +bool Manager::isKeyPressed(Manager::Modifier modifier) const { + switch (modifier) { + case Manager::Modifier::CONTROL: + return isKeyPressed(sf::Keyboard::LControl) || isKeyPressed(sf::Keyboard::RControl); + + case Manager::Modifier::ALT: + return isKeyPressed(sf::Keyboard::LAlt) || isKeyPressed(sf::Keyboard::RAlt); + + case Manager::Modifier::SYSTEM: + return isKeyPressed(sf::Keyboard::LSystem) || isKeyPressed(sf::Keyboard::RSystem); + + case Manager::Modifier::SHIFT: + return isKeyPressed(sf::Keyboard::LShift) || isKeyPressed(sf::Keyboard::RShift); + } + + return false; +} diff --git a/src/player.cpp b/src/player.cpp index 0640a0b..edda88a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -41,21 +41,21 @@ sf::Vector2f Player::getForces(const Level& level) const { // déplacement de la balle après appui sur les touches de direction if (getPlayerNumber() == 0) { - if (level.isKeyPressed(sf::Keyboard::Left)) { + if (level.getManager().isKeyPressed(sf::Keyboard::Left)) { forces += level.getLeftDirection(); } - if (level.isKeyPressed(sf::Keyboard::Right)) { + if (level.getManager().isKeyPressed(sf::Keyboard::Right)) { forces += level.getRightDirection(); } } if (getPlayerNumber() == 1) { - if (level.isKeyPressed(sf::Keyboard::Q)) { + if (level.getManager().isKeyPressed(sf::Keyboard::Q)) { forces += level.getLeftDirection(); } - if (level.isKeyPressed(sf::Keyboard::D)) { + if (level.getManager().isKeyPressed(sf::Keyboard::D)) { forces += level.getRightDirection(); } } diff --git a/src/state.cpp b/src/state.cpp index b04cbcc..8b31fc3 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -8,14 +8,22 @@ Manager& State::getManager() { return manager; } +const Manager& State::getManager() const { + return manager; +} + ResourceManager& State::getResourceManager() { return manager.getResourceManager(); } +const ResourceManager& State::getResourceManager() const { + return manager.getResourceManager(); +} + sf::RenderWindow& State::getWindow() { return manager.getWindow(); } -bool State::isKeyPressed(sf::Keyboard::Key key) const { - return manager.isKeyPressed(key); +const sf::RenderWindow& State::getWindow() const { + return manager.getWindow(); }