Meilleure séparation du processEvent
This commit is contained in:
		
							parent
							
								
									340d245c27
								
							
						
					
					
						commit
						3b2aac5ffc
					
				|  | @ -74,25 +74,24 @@ protected: | |||
|      */ | ||||
|     virtual void draw(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Traite un événement | ||||
|      */ | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
| public: | ||||
|     Editor(Manager& manager); | ||||
|     virtual ~Editor(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Appelé par le manager lorsque l'état commence à | ||||
|      * être utilisée | ||||
|      * Appelé par le manager lorsque l'état est utilisé | ||||
|      */ | ||||
|     virtual void begin(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le passage à la frame suivante sur cet état | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void frame(const std::vector<sf::Event>& events); | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le dessin d'une frame | ||||
|      */ | ||||
|     virtual void frame(); | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -28,11 +28,6 @@ protected: | |||
|      */ | ||||
|     virtual void draw(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Traite un événement | ||||
|      */ | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * S'assure que la caméra est centrée sur les joueurs | ||||
|      */ | ||||
|  | @ -43,14 +38,19 @@ public: | |||
|     virtual ~Game(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Appelé par le manager lorsque le jeu commence | ||||
|      * Appelé par le manager lorsque l'état est utilisé | ||||
|      */ | ||||
|     virtual void begin(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le passage à la frame suivante du jeu | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void frame(const std::vector<sf::Event>& events); | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le dessin d'une frame | ||||
|      */ | ||||
|     virtual void frame(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Mise en mode test : l'appui sur espace renvoie | ||||
|  |  | |||
|  | @ -37,11 +37,6 @@ protected: | |||
|      */ | ||||
|     virtual void draw(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Traite un événement | ||||
|      */ | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Convertit les coordonnées à l'écran en coordonnées du monde | ||||
|      * d'après la vue caméra | ||||
|  | @ -69,14 +64,14 @@ public: | |||
|     virtual void save(std::string name); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Appelé par le manager lorsque l'état commence à être utilisé | ||||
|      * Appelé par le manager lorsque l'état est utilisé | ||||
|      */ | ||||
|     virtual void begin(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le passage à la frame suivante sur cet état | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void frame(const std::vector<sf::Event>& events); | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Récupère le nom du niveau | ||||
|  |  | |||
|  | @ -21,11 +21,6 @@ private: | |||
|     unsigned int selection; | ||||
| 
 | ||||
| protected: | ||||
|     /**
 | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Affiche les règles du jeu | ||||
|      */ | ||||
|  | @ -51,14 +46,19 @@ public: | |||
|     virtual ~Menu(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Appelé par le manager lorsque le menu est affiché | ||||
|      * Appelé par le manager lorsque l'état est utilisé | ||||
|      */ | ||||
|     virtual void begin(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Dessine la prochaine frame du menu | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void frame(const std::vector<sf::Event>& events); | ||||
|     virtual void processEvent(const sf::Event& event); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le dessin d'une frame | ||||
|      */ | ||||
|     virtual void frame(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Affiche le menu principal | ||||
|  |  | |||
|  | @ -14,26 +14,24 @@ class State { | |||
| private: | ||||
|     Manager& manager; | ||||
| 
 | ||||
| protected: | ||||
|     /**
 | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void processEvent(const sf::Event& event) = 0; | ||||
| 
 | ||||
| public: | ||||
|     State(Manager& manager); | ||||
|     virtual ~State(); | ||||
| 
 | ||||
|     /**
 | ||||
|      * Appelé par le manager lorsque l'état commence à | ||||
|      * être utilisé | ||||
|      * Appelé par le manager lorsque l'état est utilisé | ||||
|      */ | ||||
|     virtual void begin() = 0; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le passage à la frame suivante sur cet état | ||||
|      * Traite l'événement donné | ||||
|      */ | ||||
|     virtual void frame(const std::vector<sf::Event>& events); | ||||
|     virtual void processEvent(const sf::Event& event) = 0; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Demande le dessin d'une frame | ||||
|      */ | ||||
|     virtual void frame() = 0; | ||||
| 
 | ||||
|     /**
 | ||||
|      * Récupère le gestionnaire | ||||
|  |  | |||
|  | @ -39,17 +39,6 @@ void Editor::begin() { | |||
|     getWindow().setFramerateLimit(60); | ||||
| } | ||||
| 
 | ||||
| void Editor::frame(const std::vector<sf::Event>& events) { | ||||
|     // traitement des événements
 | ||||
|     Level::frame(events); | ||||
| 
 | ||||
|     // titre de la fenêtre
 | ||||
|     getManager().setTitle(sf::String(L"Édition de ") + getName()); | ||||
| 
 | ||||
|     // dessin de la frame
 | ||||
|     draw(); | ||||
| } | ||||
| 
 | ||||
| void Editor::processEvent(const sf::Event& event) { | ||||
|     Level::processEvent(event); | ||||
| 
 | ||||
|  | @ -173,6 +162,14 @@ void Editor::processEvent(const sf::Event& event) { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void Editor::frame() { | ||||
|     // titre de la fenêtre
 | ||||
|     getManager().setTitle(sf::String(L"Édition de ") + getName()); | ||||
| 
 | ||||
|     // dessin de la frame
 | ||||
|     draw(); | ||||
| } | ||||
| 
 | ||||
| void Editor::draw() { | ||||
|     sf::RenderWindow& window = getWindow(); | ||||
|     sf::Vector2i window_size = (sf::Vector2i) window.getSize(); | ||||
|  |  | |||
							
								
								
									
										23
									
								
								src/game.cpp
								
								
								
								
							
							
						
						
									
										23
									
								
								src/game.cpp
								
								
								
								
							|  | @ -17,10 +17,17 @@ void Game::begin() { | |||
|     getWindow().setFramerateLimit(0); | ||||
| } | ||||
| 
 | ||||
| void Game::frame(const std::vector<sf::Event>& events) { | ||||
|     // traitement des événements
 | ||||
|     Level::frame(events); | ||||
| void Game::processEvent(const sf::Event& event) { | ||||
|     Level::processEvent(event); | ||||
| 
 | ||||
|     // appui sur espace en mode test : retour à l'éditeur
 | ||||
|     if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space && test_mode) { | ||||
|         test_mode = false; | ||||
|         getManager().setState(return_state); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Game::frame() { | ||||
|     // titre de la fenêtre
 | ||||
|     getManager().setTitle(getName()); | ||||
|     sf::Time current_time = getManager().getCurrentTime(); | ||||
|  | @ -47,16 +54,6 @@ void Game::frame(const std::vector<sf::Event>& events) { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void Game::processEvent(const sf::Event& event) { | ||||
|     Level::processEvent(event); | ||||
| 
 | ||||
|     // appui sur espace en mode test : retour à l'éditeur
 | ||||
|     if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space && test_mode) { | ||||
|         test_mode = false; | ||||
|         getManager().setState(return_state); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Game::draw() { | ||||
|     sf::Vector2i window_size = (sf::Vector2i) getWindow().getSize(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -138,11 +138,6 @@ void Level::begin() { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void Level::frame(const std::vector<sf::Event>& events) { | ||||
|     // traitement des événements
 | ||||
|     State::frame(events); | ||||
| } | ||||
| 
 | ||||
| void Level::processEvent(const sf::Event& event) { | ||||
|     // lorsque la fenêtre est redimensionnée, mise à jour
 | ||||
|     // de la taille de la caméra
 | ||||
|  |  | |||
|  | @ -19,6 +19,11 @@ void Manager::start() { | |||
|             next_state = nullptr; | ||||
|         } | ||||
| 
 | ||||
|         // vérification de sécurité
 | ||||
|         if (state == NULL) { | ||||
|             throw std::runtime_error("Aucun état à afficher pour le jeu"); | ||||
|         } | ||||
| 
 | ||||
|         // traitement des évènements reçus
 | ||||
|         while (window.pollEvent(event)) { | ||||
|             // fermeture de la fenêtre
 | ||||
|  | @ -33,16 +38,11 @@ void Manager::start() { | |||
|                 )); | ||||
|             } | ||||
| 
 | ||||
|             events.push_back(event); | ||||
|             state->processEvent(event); | ||||
|         } | ||||
| 
 | ||||
|         // demande à l'état de se mettre à jour sur
 | ||||
|         // la prochaine frame
 | ||||
|         if (state == NULL) { | ||||
|             throw std::runtime_error("Aucune état à afficher pour le jeu"); | ||||
|         } | ||||
| 
 | ||||
|         state->frame(events); | ||||
|         // affichage de la prochaine frame
 | ||||
|         state->frame(); | ||||
|         window.display(); | ||||
|     } | ||||
| } | ||||
|  |  | |||
							
								
								
									
										105
									
								
								src/menu.cpp
								
								
								
								
							
							
						
						
									
										105
									
								
								src/menu.cpp
								
								
								
								
							|  | @ -15,10 +15,58 @@ void Menu::begin() { | |||
|     getWindow().setFramerateLimit(60); | ||||
| } | ||||
| 
 | ||||
| void Menu::frame(const std::vector<sf::Event>& events) { | ||||
|     // traitement des événements
 | ||||
|     State::frame(events); | ||||
| void Menu::processEvent(const sf::Event& event) { | ||||
|     // gestion des touches
 | ||||
|     if (event.type == sf::Event::KeyPressed) { | ||||
|         // touche flèche haut : on passe au choix précédent
 | ||||
|         if (event.key.code == sf::Keyboard::Up) { | ||||
|             if (selection == 0) { | ||||
|                 selection = choices.size() - 1; | ||||
|             } else { | ||||
|                 selection--; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // touche flèche bas : on passe au choix suivant
 | ||||
|         if (event.key.code == sf::Keyboard::Down) { | ||||
|             if (selection == choices.size() - 1) { | ||||
|                 selection = 0; | ||||
|             } else { | ||||
|                 selection++; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // touche entrée : on exécute le choix sélectionné
 | ||||
|         if (event.key.code == sf::Keyboard::Return) { | ||||
|             actions[selection](); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // au clic, on exécute le choix pointé s'il y a lieu
 | ||||
|     if (event.type == sf::Event::MouseButtonPressed) { | ||||
|         sf::Vector2f position(event.mouseButton.x, event.mouseButton.y); | ||||
| 
 | ||||
|         for (unsigned int i = 0; i < labels.size(); i++) { | ||||
|             if (labels[i].getGlobalBounds().contains(position)) { | ||||
|                 actions[i](); | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // au déplacement de souris, on sélectionne le choix pointé s'il y a lieu
 | ||||
|     if (event.type == sf::Event::MouseMoved) { | ||||
|         sf::Vector2f position(event.mouseMove.x, event.mouseMove.y); | ||||
| 
 | ||||
|         for (unsigned int i = 0; i < labels.size(); i++) { | ||||
|             if (labels[i].getGlobalBounds().contains(position)) { | ||||
|                 selection = i; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Menu::frame() { | ||||
|     // titre de la fenêtre
 | ||||
|     getManager().setTitle(""); | ||||
| 
 | ||||
|  | @ -87,57 +135,6 @@ void Menu::frame(const std::vector<sf::Event>& events) { | |||
|     window.display(); | ||||
| } | ||||
| 
 | ||||
| void Menu::processEvent(const sf::Event& event) { | ||||
|     // gestion des touches
 | ||||
|     if (event.type == sf::Event::KeyPressed) { | ||||
|         // touche flèche haut : on passe au choix précédent
 | ||||
|         if (event.key.code == sf::Keyboard::Up) { | ||||
|             if (selection == 0) { | ||||
|                 selection = choices.size() - 1; | ||||
|             } else { | ||||
|                 selection--; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // touche flèche bas : on passe au choix suivant
 | ||||
|         if (event.key.code == sf::Keyboard::Down) { | ||||
|             if (selection == choices.size() - 1) { | ||||
|                 selection = 0; | ||||
|             } else { | ||||
|                 selection++; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // touche entrée : on exécute le choix sélectionné
 | ||||
|         if (event.key.code == sf::Keyboard::Return) { | ||||
|             actions[selection](); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // au clic, on exécute le choix pointé s'il y a lieu
 | ||||
|     if (event.type == sf::Event::MouseButtonPressed) { | ||||
|         sf::Vector2f position(event.mouseButton.x, event.mouseButton.y); | ||||
| 
 | ||||
|         for (unsigned int i = 0; i < labels.size(); i++) { | ||||
|             if (labels[i].getGlobalBounds().contains(position)) { | ||||
|                 actions[i](); | ||||
|                 return; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // au déplacement de souris, on sélectionne le choix pointé s'il y a lieu
 | ||||
|     if (event.type == sf::Event::MouseMoved) { | ||||
|         sf::Vector2f position(event.mouseMove.x, event.mouseMove.y); | ||||
| 
 | ||||
|         for (unsigned int i = 0; i < labels.size(); i++) { | ||||
|             if (labels[i].getGlobalBounds().contains(position)) { | ||||
|                 selection = i; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void Menu::loadMainMenu() { | ||||
|     choices.clear(); | ||||
|     actions.clear(); | ||||
|  |  | |||
|  | @ -4,18 +4,10 @@ | |||
| State::State(Manager& manager) : manager(manager) {} | ||||
| State::~State() {} | ||||
| 
 | ||||
| void State::frame(const std::vector<sf::Event>& events) { | ||||
|     // traitement des événements
 | ||||
|     for (unsigned int i = 0; i < events.size(); i++) { | ||||
|         processEvent(events[i]); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| Manager& State::getManager() { | ||||
|     return manager; | ||||
| } | ||||
| 
 | ||||
| // raccourcis vers des méthodes du gestionnaire
 | ||||
| ResourceManager& State::getResourceManager() { | ||||
|     return manager.getResourceManager(); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue