Amélioration de l'utilisation de la mémoire

This commit is contained in:
Mattéo Delabre 2016-04-19 19:09:46 +02:00
parent dca255f7bd
commit 837621d18b
3 changed files with 38 additions and 10 deletions

View File

@ -18,8 +18,10 @@ class Manager {
private:
sf::RenderWindow window;
sf::Time previous_time;
sfg::SFGUI sfgui;
sfg::Desktop desktop;
std::vector<sfg::Widget::Ptr> 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

View File

@ -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) {

View File

@ -1,5 +1,6 @@
#include "state.hpp"
#include "manager.hpp"
#include <algorithm>
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() {