Meilleure séparation du processEvent
This commit is contained in:
parent
340d245c27
commit
3b2aac5ffc
|
@ -74,25 +74,24 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
|
||||||
/**
|
|
||||||
* Traite un événement
|
|
||||||
*/
|
|
||||||
virtual void processEvent(const sf::Event& event);
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Editor(Manager& manager);
|
Editor(Manager& manager);
|
||||||
virtual ~Editor();
|
virtual ~Editor();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appelé par le manager lorsque l'état commence à
|
* Appelé par le manager lorsque l'état est utilisé
|
||||||
* être utilisée
|
|
||||||
*/
|
*/
|
||||||
virtual void begin();
|
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
|
#endif
|
||||||
|
|
|
@ -28,11 +28,6 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual void draw();
|
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
|
* S'assure que la caméra est centrée sur les joueurs
|
||||||
*/
|
*/
|
||||||
|
@ -43,14 +38,19 @@ public:
|
||||||
virtual ~Game();
|
virtual ~Game();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appelé par le manager lorsque le jeu commence
|
* Appelé par le manager lorsque l'état est utilisé
|
||||||
*/
|
*/
|
||||||
virtual void begin();
|
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
|
* Mise en mode test : l'appui sur espace renvoie
|
||||||
|
|
|
@ -37,11 +37,6 @@ protected:
|
||||||
*/
|
*/
|
||||||
virtual void draw();
|
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
|
* Convertit les coordonnées à l'écran en coordonnées du monde
|
||||||
* d'après la vue caméra
|
* d'après la vue caméra
|
||||||
|
@ -69,14 +64,14 @@ public:
|
||||||
virtual void save(std::string name);
|
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();
|
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
|
* Récupère le nom du niveau
|
||||||
|
|
|
@ -21,11 +21,6 @@ private:
|
||||||
unsigned int selection;
|
unsigned int selection;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
|
||||||
* Traite l'événement donné
|
|
||||||
*/
|
|
||||||
virtual void processEvent(const sf::Event& event);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Affiche les règles du jeu
|
* Affiche les règles du jeu
|
||||||
*/
|
*/
|
||||||
|
@ -51,14 +46,19 @@ public:
|
||||||
virtual ~Menu();
|
virtual ~Menu();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appelé par le manager lorsque le menu est affiché
|
* Appelé par le manager lorsque l'état est utilisé
|
||||||
*/
|
*/
|
||||||
virtual void begin();
|
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
|
* Affiche le menu principal
|
||||||
|
|
|
@ -14,26 +14,24 @@ class State {
|
||||||
private:
|
private:
|
||||||
Manager& manager;
|
Manager& manager;
|
||||||
|
|
||||||
protected:
|
|
||||||
/**
|
|
||||||
* Traite l'événement donné
|
|
||||||
*/
|
|
||||||
virtual void processEvent(const sf::Event& event) = 0;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
State(Manager& manager);
|
State(Manager& manager);
|
||||||
virtual ~State();
|
virtual ~State();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Appelé par le manager lorsque l'état commence à
|
* Appelé par le manager lorsque l'état est utilisé
|
||||||
* être utilisé
|
|
||||||
*/
|
*/
|
||||||
virtual void begin() = 0;
|
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
|
* Récupère le gestionnaire
|
||||||
|
|
|
@ -39,17 +39,6 @@ void Editor::begin() {
|
||||||
getWindow().setFramerateLimit(60);
|
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) {
|
void Editor::processEvent(const sf::Event& event) {
|
||||||
Level::processEvent(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() {
|
void Editor::draw() {
|
||||||
sf::RenderWindow& window = getWindow();
|
sf::RenderWindow& window = getWindow();
|
||||||
sf::Vector2i window_size = (sf::Vector2i) window.getSize();
|
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);
|
getWindow().setFramerateLimit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::frame(const std::vector<sf::Event>& events) {
|
void Game::processEvent(const sf::Event& event) {
|
||||||
// traitement des événements
|
Level::processEvent(event);
|
||||||
Level::frame(events);
|
|
||||||
|
|
||||||
|
// 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
|
// titre de la fenêtre
|
||||||
getManager().setTitle(getName());
|
getManager().setTitle(getName());
|
||||||
sf::Time current_time = getManager().getCurrentTime();
|
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() {
|
void Game::draw() {
|
||||||
sf::Vector2i window_size = (sf::Vector2i) getWindow().getSize();
|
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) {
|
void Level::processEvent(const sf::Event& event) {
|
||||||
// lorsque la fenêtre est redimensionnée, mise à jour
|
// lorsque la fenêtre est redimensionnée, mise à jour
|
||||||
// de la taille de la caméra
|
// de la taille de la caméra
|
||||||
|
|
|
@ -19,6 +19,11 @@ void Manager::start() {
|
||||||
next_state = nullptr;
|
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
|
// traitement des évènements reçus
|
||||||
while (window.pollEvent(event)) {
|
while (window.pollEvent(event)) {
|
||||||
// fermeture de la fenêtre
|
// 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
|
// affichage de la prochaine frame
|
||||||
// la prochaine frame
|
state->frame();
|
||||||
if (state == NULL) {
|
|
||||||
throw std::runtime_error("Aucune état à afficher pour le jeu");
|
|
||||||
}
|
|
||||||
|
|
||||||
state->frame(events);
|
|
||||||
window.display();
|
window.display();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
105
src/menu.cpp
105
src/menu.cpp
|
@ -15,10 +15,58 @@ void Menu::begin() {
|
||||||
getWindow().setFramerateLimit(60);
|
getWindow().setFramerateLimit(60);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menu::frame(const std::vector<sf::Event>& events) {
|
void Menu::processEvent(const sf::Event& event) {
|
||||||
// traitement des événements
|
// gestion des touches
|
||||||
State::frame(events);
|
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
|
// titre de la fenêtre
|
||||||
getManager().setTitle("");
|
getManager().setTitle("");
|
||||||
|
|
||||||
|
@ -87,57 +135,6 @@ void Menu::frame(const std::vector<sf::Event>& events) {
|
||||||
window.display();
|
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() {
|
void Menu::loadMainMenu() {
|
||||||
choices.clear();
|
choices.clear();
|
||||||
actions.clear();
|
actions.clear();
|
||||||
|
|
|
@ -4,18 +4,10 @@
|
||||||
State::State(Manager& manager) : manager(manager) {}
|
State::State(Manager& manager) : manager(manager) {}
|
||||||
State::~State() {}
|
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() {
|
Manager& State::getManager() {
|
||||||
return manager;
|
return manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
// raccourcis vers des méthodes du gestionnaire
|
|
||||||
ResourceManager& State::getResourceManager() {
|
ResourceManager& State::getResourceManager() {
|
||||||
return manager.getResourceManager();
|
return manager.getResourceManager();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue