From 837621d18bc2c8dced2f96e4069ab6d1035cabd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Tue, 19 Apr 2016 19:09:46 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20l'utilisation=20de=20l?= =?UTF-8?q?a=20m=C3=A9moire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/manager.hpp | 12 ++++++++++-- src/editor.cpp | 12 ++++++++---- src/manager.cpp | 24 ++++++++++++++++++++---- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/include/manager.hpp b/include/manager.hpp index 30e7775..13b3981 100644 --- a/include/manager.hpp +++ b/include/manager.hpp @@ -18,8 +18,10 @@ class Manager { private: sf::RenderWindow window; sf::Time previous_time; + sfg::SFGUI sfgui; sfg::Desktop desktop; + std::vector widgets; unsigned int framerate; ResourceManager resource_manager; @@ -53,6 +55,7 @@ public: static const float GRID; Manager(); + ~Manager(); /** * Démarre la boucle principale du jeu @@ -102,9 +105,14 @@ public: void useGUIView(); /** - * Renvoie le bureau pour l'affichage de l'interface + * Ajoute un nouveau widget à l'interface */ - sfg::Desktop& getDesktop(); + void addWidget(sfg::Widget::Ptr widget); + + /** + * Supprime un widget de l'interface + */ + void removeWidget(sfg::Widget::Ptr widget); /** * Renvoie le titre actuel de la fenêtre diff --git a/src/editor.cpp b/src/editor.cpp index 1084a4d..170d88b 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -34,9 +34,13 @@ inline sf::Vector2f roundVectorToGrid(sf::Vector2f input) { Editor::Editor(Manager& manager) : Level(manager), drag_control_point(nullptr), drag_mode(Editor::DragMode::NONE), widget_timer(manager, true, std::bind(&Editor::setTotalTime, this, std::placeholders::_1)), - toolbar(*this) {} + toolbar(*this) { + getManager().addWidget(toolbar.getWindow()); +} -Editor::~Editor() {} +Editor::~Editor() { + getManager().removeWidget(toolbar.getWindow()); +} void Editor::enable() { Level::enable(); @@ -48,8 +52,8 @@ void Editor::enable() { // joue la musique de l'éditeur getResourceManager().playMusic("editor.ogg"); - // ajout de la toolbar à la liste des widgets - getManager().getDesktop().Add(toolbar.getWindow()); + // on affiche la toolbar de l'éditeur + toolbar.getWindow()->Show(true); } void Editor::processEvent(const sf::Event& event) { diff --git a/src/manager.cpp b/src/manager.cpp index 6015953..66c0d14 100644 --- a/src/manager.cpp +++ b/src/manager.cpp @@ -1,5 +1,6 @@ #include "state.hpp" #include "manager.hpp" +#include const unsigned int Manager::FPS = 60; const sf::Time Manager::FRAME_TIME = sf::seconds(1.f / Manager::FPS); @@ -22,6 +23,11 @@ Manager::Manager() : previous_time(sf::seconds(0)), title(sf::String(L"")), gui_view = window.getDefaultView(); } +Manager::~Manager() { + widgets.clear(); + desktop.RemoveAll(); +} + void Manager::start() { while (!states.empty()) { sf::Event event; @@ -64,8 +70,10 @@ void Manager::start() { if (previous_state != states.top().get()) { previous_state = states.top().get(); - // on vide l'interface de l'état précédent - desktop.RemoveAll(); + // on masque tous les widgets de l'interface + for (const auto &widget : widgets) { + widget->Show(false); + } // on initialise le nouvel état previous_state->enable(); @@ -124,8 +132,16 @@ void Manager::useGUIView() { window.setView(gui_view); } -sfg::Desktop& Manager::getDesktop() { - return desktop; +void Manager::addWidget(sfg::Widget::Ptr widget) { + widgets.push_back(widget); + desktop.Add(widget); +} + +void Manager::removeWidget(sfg::Widget::Ptr widget) { + desktop.Remove(widget); + widgets.erase(std::remove( + widgets.begin(), widgets.end(), widget + ), widgets.end()); } sf::String Manager::getTitle() {