From dc8a0e05d8bda78052877bd98c2354784eb30c25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Sat, 9 Apr 2016 02:32:11 +0200 Subject: [PATCH] =?UTF-8?q?Nettoyage=20et=20am=C3=A9liorations=20du=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/editor.hpp | 11 +- include/game.hpp | 7 +- include/level.hpp | 10 +- include/manager.hpp | 6 - include/menu.hpp | 65 +++++--- include/util/widget_selector.hpp | 4 +- include/view.hpp | 13 +- res/main_font.ttf | Bin 169476 -> 0 bytes src/editor.cpp | 29 ++-- src/game.cpp | 16 +- src/level.cpp | 33 ++-- src/manager.cpp | 15 +- src/menu.cpp | 260 ++++++++++++++++--------------- src/util/widget_selector.cpp | 15 +- src/view.cpp | 7 + 15 files changed, 265 insertions(+), 226 deletions(-) delete mode 100644 res/main_font.ttf diff --git a/include/editor.hpp b/include/editor.hpp index 1e584e8..ca38331 100644 --- a/include/editor.hpp +++ b/include/editor.hpp @@ -19,7 +19,7 @@ private: sf::Vector2i drag_start; sf::Vector2i drag_end; DragMode drag_mode; - + WidgetTimer widget_timer; WidgetSelector widget_selector; @@ -84,14 +84,15 @@ public: virtual ~Editor(); /** - * Demande le passage à la frame suivante sur cette vue + * Appelé par le manager lorsque la vue commence à + * être utilisée */ - virtual void frame(); + virtual void begin(); /** - * Charge un niveau de jeu depuis le fichier donné + * Demande le passage à la frame suivante sur cette vue */ - virtual void load(std::ifstream& file); + virtual void frame(const std::vector& events); }; #endif diff --git a/include/game.hpp b/include/game.hpp index 77b5d32..c58770d 100644 --- a/include/game.hpp +++ b/include/game.hpp @@ -43,14 +43,15 @@ public: virtual ~Game(); /** - * Charge un niveau de jeu depuis le fichier donné + * Appelé par le manager lorsque la vue commence à + * être utilisée */ - virtual void load(std::ifstream& file); + virtual void begin(); /** * Demande le passage à la frame suivante sur cette vue */ - virtual void frame(); + virtual void frame(const std::vector& events); /** * Mise en mode test : l'appui sur espace renvoie diff --git a/include/level.hpp b/include/level.hpp index 3a2bc4c..8e93d81 100644 --- a/include/level.hpp +++ b/include/level.hpp @@ -19,11 +19,13 @@ private: sf::String name; int total_time; sf::Sprite background; + std::string music_name; std::vector objects; std::vector> zone; protected: + /** * Dessine tous les objets et le fond à l'écran */ @@ -60,10 +62,16 @@ public: */ virtual void save(); + /** + * Appelé par le manager lorsque la vue commence à + * être utilisée + */ + virtual void begin(); + /** * Demande le passage à la frame suivante sur cette vue */ - virtual void frame(); + virtual void frame(const std::vector& events); /** * Récupère le nom du niveau diff --git a/include/manager.hpp b/include/manager.hpp index 1588c06..12fb7df 100644 --- a/include/manager.hpp +++ b/include/manager.hpp @@ -62,12 +62,6 @@ public: */ ResourceManager& getResourceManager(); - /** - * Renvoie la liste des événements reçus pour la - * précédente frame - */ - const std::vector& getEvents(); - /** * Remet la vue par défaut (zoom 1:1, origine en haut à gauche) */ diff --git a/include/menu.hpp b/include/menu.hpp index f96616c..e10f543 100644 --- a/include/menu.hpp +++ b/include/menu.hpp @@ -2,52 +2,71 @@ #define __PTF_MENU_HPP__ #include "manager.hpp" -#include "game.hpp" -#include "editor.hpp" #include "view.hpp" -#include "resource_manager.hpp" -#include +#include #include -#define NB_CHOICES 4 - /** * La classe Menu charge le menu du jeu * et permet de choisir entre jouer, lire les règles * et quitter. */ class Menu : public View { +private: + std::vector choices; + std::vector> actions; + unsigned int selection; + +protected: + /** + * Traite l'événement donné + */ + virtual void processEvent(const sf::Event& event); public: Menu(Manager& manager); virtual ~Menu(); /** - * Dessine le menu + * Appelé par le manager lorsque la vue commence à + * être utilisée */ - void frame(); + virtual void begin(); /** - * Permet de changer le choix sélectionné + * Dessine le menu */ - void MoveUp(); - void MoveDown(); - void menu1(); - void menu2(); + virtual void frame(const std::vector& events); -private: - //repère le choix sélectionné - int selection; + /** + * Affiche le menu principal + */ + void loadMainMenu(); - int menu_nb; + /** + * Affiche le menu de choix des niveaux + */ + void loadLevelMenu(); - int positionY; - std::vector> menu[NB_CHOICES]; - sf::Font font; + /** + * Affiche les règles du jeu + */ + void loadRules(); - //tableau de textes modélisant les différents - //choix dans le menu - sf::Text choice[NB_CHOICES]; + /** + * Démarre l'éditeur + */ + void launchEditor(); + + /** + * Démarre le jeu avec le niveau donné + */ + void launchGame(std::string name); + + /** + * Quitte le jeu et le menu + */ + void quit(); }; diff --git a/include/util/widget_selector.hpp b/include/util/widget_selector.hpp index 5de17f4..7e274d1 100644 --- a/include/util/widget_selector.hpp +++ b/include/util/widget_selector.hpp @@ -10,9 +10,7 @@ */ struct SelectorItem { sf::String name; - sf::Sprite sprite; - sf::Sprite select_sprite; }; /** @@ -25,7 +23,7 @@ struct SelectorCategory { /** * Ajoute un nouvel item dans cette catégorie */ - void addItem(sf::String name, sf::Texture& texture, sf::Texture& select_texture); + std::shared_ptr addItem(sf::String name, sf::Texture& texture); }; /** diff --git a/include/view.hpp b/include/view.hpp index b91cf7e..f0ad84b 100644 --- a/include/view.hpp +++ b/include/view.hpp @@ -13,14 +13,25 @@ class View { protected: Manager& manager; + /** + * Traite l'événement donné + */ + virtual void processEvent(const sf::Event& event) = 0; + public: View(Manager& manager); virtual ~View(); + /** + * Appelé par le manager lorsque la vue commence à + * être utilisée + */ + virtual void begin() = 0; + /** * Demande le passage à la frame suivante sur cette vue */ - virtual void frame() = 0; + virtual void frame(const std::vector& events); }; #endif diff --git a/res/main_font.ttf b/res/main_font.ttf deleted file mode 100644 index d2a58e22901001c209dc444acf81626f54f28f64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169476 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 basic = widget_selector.addCategory("BASE"); - basic->addItem("Bloc", resources.getTexture("block.png"), resources.getTexture("block_select.png")); - basic->addItem("Ball", resources.getTexture("ball.png"), resources.getTexture("block_select.png")); + basic->addItem("Block", resources.getTexture("block.png")); + basic->addItem("Player", resources.getTexture("player.tga")); } Editor::~Editor() {} -void Editor::load(std::ifstream& file) { - Level::load(file); - manager.setTitle(sf::String(L"Édition de ") + getName()); +void Editor::begin() { + Level::begin(); + manager.getWindow().setFramerateLimit(60); } -void Editor::frame() { - // traitements généraux - Level::frame(); +void Editor::frame(const std::vector& events) { + // traitement des événements + Level::frame(events); + + // titre de la fenêtre + manager.setTitle(sf::String(L"Édition de ") + getName()); // dessin de la frame draw(); - sf::sleep(sf::seconds(1.f / 30)); } void Editor::processEvent(const sf::Event& event) { @@ -52,7 +57,7 @@ void Editor::processEvent(const sf::Event& event) { // lorsque l'on clique dans l'éditeur if (event.type == sf::Event::MouseButtonPressed) { sf::Vector2i mouse_position(event.mouseButton.x, event.mouseButton.y); - sf::Vector2f position = convertCoords(mouse_position); + sf::Vector2f position = pixelToCoords(mouse_position); ObjectPtr pointed_object = getObject(position); if (event.mouseButton.button == sf::Mouse::Left) { @@ -101,7 +106,7 @@ void Editor::processEvent(const sf::Event& event) { // lorsqu'on déplace la souris if (event.type == sf::Event::MouseMoved) { sf::Vector2i mouse_position(event.mouseMove.x, event.mouseMove.y); - sf::Vector2f position = convertCoords(mouse_position); + sf::Vector2f position = pixelToCoords(mouse_position); ObjectPtr pointed_object = getObject(position); drag_end = mouse_position; @@ -126,7 +131,7 @@ void Editor::processEvent(const sf::Event& event) { if (event.type == sf::Event::MouseButtonReleased) { // mode sélection rectangulaire : on applique la sélection if (drag_mode == DragMode::SELECT_RECT) { - select(convertCoords(drag_start), convertCoords(drag_end)); + select(pixelToCoords(drag_start), pixelToCoords(drag_end)); } drag_mode = DragMode::NONE; diff --git a/src/game.cpp b/src/game.cpp index 4786c6a..6295d58 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -12,14 +12,17 @@ Game::Game(Manager& manager) : Level(manager), Game::~Game() {} -void Game::load(std::ifstream& file) { - Level::load(file); - manager.setTitle(getName()); +void Game::begin() { + Level::begin(); + manager.getWindow().setFramerateLimit(0); } -void Game::frame() { - // traitements généraux - Level::frame(); +void Game::frame(const std::vector& events) { + // traitement des événements + Level::frame(events); + + // titre de la fenêtre + manager.setTitle(getName()); sf::Time current_time = manager.getCurrentTime(); @@ -67,7 +70,6 @@ void Game::draw() { } void Game::ensureCentered() { - sf::Vector2i window_size = (sf::Vector2i) manager.getWindow().getSize(); std::vector& objects = getObjects(); sf::Vector2f total_position; diff --git a/src/level.cpp b/src/level.cpp index 2532298..b19cbaf 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -17,14 +17,8 @@ std::map> object_type_map {Block::TYPE_ID, Block::load} }; -Level::Level(Manager& manager) : View(manager), total_time(30) { - camera = manager.getWindow().getDefaultView(); - camera.setCenter(0, 0); -} - -Level::~Level() { - objects.clear(); -} +Level::Level(Manager& manager) : View(manager) {} +Level::~Level() {} void Level::load(std::ifstream& file) { // vide le niveau précédent s'il y a lieu @@ -82,13 +76,10 @@ void Level::load(std::ifstream& file) { } // lecture des chemins de la musique et du fond - std::string music_name, background_name; + std::string background_name; ResourceManager& resource_manager = manager.getResourceManager(); std::getline(file, music_name, '\0'); - resource_manager.setMusic(music_name); - resource_manager.playMusic(); - std::getline(file, background_name, '\0'); background.setTexture(resource_manager.getTexture(background_name)); @@ -118,15 +109,23 @@ void Level::save() { // TODO: faire une fonction d'enregistrement } -void Level::frame() { - const std::vector& events = manager.getEvents(); +void Level::begin() { + ResourceManager& resources = manager.getResourceManager(); - // traitement des événements - for (unsigned int i = 0; i < events.size(); i++) { - processEvent(events[i]); + camera = manager.getWindow().getDefaultView(); + camera.setCenter(0, 0); + + if (music_name != "") { + resources.setMusic(music_name); + resources.playMusic(); } } +void Level::frame(const std::vector& events) { + // traitement des événements + View::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 diff --git a/src/manager.cpp b/src/manager.cpp index f94b6a4..4002555 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -11,11 +11,12 @@ void Manager::start() { while (running) { sf::Event event; - events.clear(); + std::vector events; // si un changement de vue a été demandé, on l'effectue maintenant if (next_view != nullptr) { view = next_view; + next_view->begin(); next_view = nullptr; } @@ -26,7 +27,7 @@ void Manager::start() { quit(); } - // redimensionnement de la fenêtre + // redimensionnement de la vue par défaut if (event.type == sf::Event::Resized) { default_view = sf::View(sf::FloatRect( 0, 0, event.size.width, event.size.height @@ -42,7 +43,7 @@ void Manager::start() { throw std::runtime_error("Aucune vue à afficher pour le jeu"); } - view->frame(); + view->frame(events); window.display(); } } @@ -73,10 +74,6 @@ ResourceManager& Manager::getResourceManager() { return resource_manager; } -const std::vector& Manager::getEvents() { - return events; -} - void Manager::resetDefaultView() { window.setView(default_view); } @@ -86,6 +83,10 @@ sf::String Manager::getTitle() { } void Manager::setTitle(sf::String set_title) { + if (title == set_title) { + return; + } + title = set_title; if (title.isEmpty()) { diff --git a/src/menu.cpp b/src/menu.cpp index cf028fb..d4d7ba6 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -1,151 +1,153 @@ #include "menu.hpp" +#include "editor.hpp" +#include "game.hpp" +#include -Menu::Menu(Manager& manager) : View(manager){ +const float MAX_WIDTH_PROPORTION = 1.f / 3.f; +const float PADDING = 24.f; - manager.getResourceManager().setMusic("menu.wav"); - manager.getResourceManager().playMusic(); +Menu::Menu(Manager& manager) : View(manager) {} +Menu::~Menu() {} - menu1(); - //mise en place des propriétés des textes affichés dans le menu - choice[0].setFont(manager.getResourceManager().getFont("raleway.ttf")); - choice[0].setColor(sf::Color::Red); - choice[0].setPosition(sf::Vector2f(positionY, 400/(NB_CHOICES + 1))); +void Menu::begin() { + ResourceManager& resources = manager.getResourceManager(); - for(int i=1; i < NB_CHOICES; i++) - { - choice[i].setFont(manager.getResourceManager().getFont("raleway.ttf")); - choice[i].setColor(sf::Color::White); - choice[i].setPosition(sf::Vector2f(positionY, 400/((NB_CHOICES + 1))*(i+1))); - } + loadMainMenu(); + resources.setMusic("menu.wav"); + resources.playMusic(); - //choix sélectionné à l'ouverture du menu - selection = 0; + manager.getWindow().setFramerateLimit(60); } -Menu::~Menu(){ -} +void Menu::frame(const std::vector& events) { + // traitement des événements + View::frame(events); -void Menu::menu1(){ - menu_nb = 1; - positionY = 460; + // titre de la fenêtitre + manager.setTitle(""); - //mise en place des textes des choix - choice[0].setString("Jouer"); - choice[1].setString("Regles du jeu"); - choice[2].setString("Creer un niveau"); - choice[3].setString("Quitter"); -} - -void Menu::menu2(){ - menu_nb = 2; - positionY = 300; - - //mise en place des textes des choix - choice[0].setString("Tutoriel"); - choice[1].setString("Niveau 1"); - choice[2].setString("Niveau 2"); -} - -void Menu::MoveUp() -{ - //change la couleur du choix sélectionné - if(selection-1 >= 0) - { - choice[selection].setColor(sf::Color::White); - selection--; - choice[selection].setColor(sf::Color::Red); - } -} - -void Menu::MoveDown() -{ - //change la couleur du choix sélectionné - if(selection+1 < NB_CHOICES) - { - choice[selection].setColor(sf::Color::White); - selection++; - choice[selection].setColor(sf::Color::Red); - } -} - -void Menu::frame(){ + // affichage du menu sf::RenderWindow& window = manager.getWindow(); + sf::Vector2f size = (sf::Vector2f) window.getSize(); + sf::Font font = manager.getResourceManager().getFont("raleway.ttf"); + window.clear(sf::Color(66, 40, 245)); + // TODO: dessiner l'image du fond - const std::vector& events = manager.getEvents(); + // on crée les textes pour chaque choix et on les dessine + float step = size.y / (choices.size() + 1); + int font_size = std::max((int) std::floor(step - PADDING), 12); - for (unsigned int i = 0; i < events.size(); i++) { - const sf::Event& event = events[i]; + for (unsigned int i = 0; i < choices.size(); i++) { + sf::Text label(choices[i], font, 32); + sf::Vector2f position( + (1 - MAX_WIDTH_PROPORTION) * size.x, + step * (i + 1) - font_size / 2 + ); - // gestion des touches - if (event.type == sf::Event::KeyPressed) { - if (event.key.code == sf::Keyboard::Up) { - MoveUp(); - } - if (event.key.code == sf::Keyboard::Down) { - MoveDown(); - } - if (event.key.code == sf::Keyboard::Return) { + float width = label.getGlobalBounds().width; + label.setPosition(position); + label.setColor(sf::Color::White); - //si on se trouve dans le menu 2 permettant de choisir les niveaux - if(menu_nb == 2){ - - //si on choisit "tutoriel", on charge le niveau tutoriel et on - //la vue passe à Game - if(selection == 0){ - std::shared_ptr game = std::shared_ptr(new Game(manager)); - std::string path; - - switch (selection) { - case 0: - path = "./levels/level1.dat"; - break; - } - - std::ifstream file; - file.open(path, std::ios::binary | std::ios::in); - game->load(file); - file.close(); - - manager.setView(game); - } - - //si on choisit "Quitter", la fenêtre se ferme - if(selection == 3){ - manager.quit(); - } - } - if(menu_nb == 1){ - - //si on choisit "jouer", la vue se met sur Lvl_menu - if(selection==0){ - menu2(); - } - if(selection==1){ - - } - - //si on choisit "créer un niveau", la vue se met sur Editor - if(selection==2){ - std::shared_ptr editor = std::shared_ptr(new Editor(manager)); - manager.setView(editor); - } - - //si on choisit "quitter", la fenêtre se ferme - if(selection==3){ - manager.quit(); - } - } - - } + // si c'est le choix sélecitonné, on le souligne + if (selection == i) { + sf::RectangleShape underline(sf::Vector2f(width, 2.f)); + underline.setPosition(position.x, position.y + font_size / 2 + 6); + underline.setFillColor(sf::Color::White); + window.draw(underline); } - } - - for(int i=0; i editor = std::shared_ptr(new Editor(manager)); + manager.setView(editor); +} + +void Menu::launchGame(std::string name) { + std::shared_ptr game = std::shared_ptr(new Game(manager)); + std::string path = "./levels/" + name; + + std::ifstream file; + file.open(path, std::ios::binary | std::ios::in); + game->load(file); + file.close(); + + manager.setView(game); +} + +void Menu::quit() { + manager.quit(); +} diff --git a/src/util/widget_selector.cpp b/src/util/widget_selector.cpp index a5c7673..0526528 100644 --- a/src/util/widget_selector.cpp +++ b/src/util/widget_selector.cpp @@ -15,22 +15,20 @@ std::shared_ptr WidgetSelector::addCategory(sf::String name) { return cat; } -void SelectorCategory::addItem(sf::String name, sf::Texture& texture, sf::Texture& select_texture) { +std::shared_ptr SelectorCategory::addItem(sf::String name, sf::Texture& texture) { auto item = std::shared_ptr(new SelectorItem); item->sprite.setTexture(texture, true); - item->select_sprite.setTexture(select_texture, true); - float width = item->sprite.getLocalBounds().width; // mise à l'échelle si trop grand ou trop petit if (width < 20 || width > 28) { item->sprite.scale(24 / width, 24 / width); - item->select_sprite.scale(24 / width, 24 / width); width = 24; } item->name = name; items.push_back(item); + return item; } bool WidgetSelector::processEvent(const sf::Event& event) { @@ -89,16 +87,9 @@ void WidgetSelector::draw(sf::Vector2f position, sf::Vector2f size) { PADDING + 24 + 38 * j ); - // affichage des sprites des items + le sprite - // de sélection si sélectionné + // affichage du sprite de l'item item->sprite.setPosition(sprite_position); - item->select_sprite.setPosition(sprite_position); - window.draw(item->sprite); - - if (selected == item.get()) { - window.draw(item->select_sprite); - } } } diff --git a/src/view.cpp b/src/view.cpp index 238328c..fb07ec6 100644 --- a/src/view.cpp +++ b/src/view.cpp @@ -2,3 +2,10 @@ View::View(Manager& manager) : manager(manager) {} View::~View() {} + +void View::frame(const std::vector& events) { + // traitement des événements + for (unsigned int i = 0; i < events.size(); i++) { + processEvent(events[i]); + } +}