Supporte aussi bien le Ctrl/Shift/Alt/System gauche que droit
This commit is contained in:
		
							parent
							
								
									1b14d4084d
								
							
						
					
					
						commit
						ef5ecc810d
					
				|  | @ -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 | ||||
|  |  | |||
|  | @ -4,8 +4,8 @@ | |||
| #include <SFML/Graphics.hpp> | ||||
| 
 | ||||
| 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 | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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(); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -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(); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue