From b2a9309ee7641402a1c0568fcbd818efb3f993a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Mon, 11 Apr 2016 21:53:51 +0200 Subject: [PATCH] =?UTF-8?q?Chargement=20dynamique=20du=20niveau=20dans=20l?= =?UTF-8?q?'=C3=A9diteur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/menu.hpp | 37 ++++++++++++++++++++++--------------- src/menu.cpp | 46 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/include/menu.hpp b/include/menu.hpp index 2503e8a..cbbe9a5 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -22,14 +22,19 @@ private: protected: /** - * Affiche les règles du jeu + * Affiche le menu principal */ - void loadRules(); + void loadMainMenu(); /** - * Démarre l'éditeur + * Affiche le menu de choix des niveaux */ - void launchEditor(); + void loadLevelMenu(); + + /** + * Affiche le menu de choix des niveaux + */ + void loadEditorMenu(); /** * Démarre le jeu avec le niveau dont le chemin @@ -38,7 +43,19 @@ protected: void launchGame(std::string path); /** - * Quitte le jeu et le menu + * Démarre les règles + */ + void launchRules(); + + /** + * Démarre l'éditeur avec le niveau dont le chemin + * complet absolu est donné en paramètre, ou bien + * en édition de nouveau niveau + */ + void launchEditor(std::string path); + + /** + * Quitte le menu */ void quit(); @@ -55,16 +72,6 @@ public: * Demande le dessin d'une frame */ virtual void frame(); - - /** - * Affiche le menu principal - */ - void loadMainMenu(); - - /** - * Affiche le menu de choix des niveaux - */ - void loadLevelMenu(); }; diff --git a/src/menu.cpp b/src/menu.cpp index bcb5c6e..ef33770 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -158,10 +158,10 @@ void Menu::loadMainMenu() { actions.push_back(std::bind(&Menu::loadLevelMenu, this)); choices.push_back(sf::String(L"Règles du jeu")); - actions.push_back(std::bind(&Menu::loadRules, this)); + actions.push_back(std::bind(&Menu::launchRules, this)); choices.push_back(sf::String(L"Éditeur")); - actions.push_back(std::bind(&Menu::launchEditor, this)); + actions.push_back(std::bind(&Menu::loadEditorMenu, this)); choices.push_back(sf::String(L"Quitter")); actions.push_back(std::bind(&Menu::quit, this)); @@ -184,15 +184,24 @@ void Menu::loadLevelMenu() { actions.push_back(std::bind(&Menu::loadMainMenu, this)); } -void Menu::loadRules() { - auto rules = std::unique_ptr(new Rules(getManager())); - getManager().pushState(std::move(rules)); -} +void Menu::loadEditorMenu() { + choices.clear(); + actions.clear(); + selection = 0; -void Menu::launchEditor() { - auto editor = std::unique_ptr(new Editor(getManager())); - editor->load(getResourceManager().getLevelPath("editor_result.dat")); - getManager().pushState(std::move(editor)); + std::vector path_list = getResourceManager().getLevelList(); + std::vector name_list; + + choices.push_back(L"Créer un nouveau niveau"); + actions.push_back(std::bind(&Menu::launchEditor, this, "")); + + for (auto it = path_list.begin(); it != path_list.end(); it++) { + choices.push_back(Level::getLevelName(*it)); + actions.push_back(std::bind(&Menu::launchEditor, this, *it)); + } + + choices.push_back("Retour"); + actions.push_back(std::bind(&Menu::loadMainMenu, this)); } void Menu::launchGame(std::string path) { @@ -201,6 +210,23 @@ void Menu::launchGame(std::string path) { getManager().pushState(std::move(game)); } +void Menu::launchRules() { + auto rules = std::unique_ptr(new Rules(getManager())); + getManager().pushState(std::move(rules)); +} + +void Menu::launchEditor(std::string path) { + auto editor = std::unique_ptr(new Editor(getManager())); + + if (path == "") { + editor->load(); + } else { + editor->load(path); + } + + getManager().pushState(std::move(editor)); +} + void Menu::quit() { getManager().popState(); }