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