From 66081fa104a3372719052df3eb60401b841e5d27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Wed, 20 Apr 2016 00:37:44 +0200 Subject: [PATCH] Le gestionnaire de ressources renvoie des pointeurs --- include/resource_manager.hpp | 12 ++++++------ src/block.cpp | 4 ++-- src/finish_block.cpp | 2 +- src/gravity_block.cpp | 2 +- src/kill_block.cpp | 2 +- src/level.cpp | 6 +++--- src/menu.cpp | 10 +++------- src/player.cpp | 4 ++-- src/resource_manager.cpp | 18 +++++++++--------- src/rules.cpp | 2 +- src/switch_block.cpp | 2 +- src/widget_timer.cpp | 6 +++--- 12 files changed, 33 insertions(+), 37 deletions(-) diff --git a/include/resource_manager.hpp b/include/resource_manager.hpp index c3de2a1..c033147 100644 --- a/include/resource_manager.hpp +++ b/include/resource_manager.hpp @@ -24,9 +24,9 @@ private: boost::filesystem::path levels_path; boost::filesystem::path musics_path; - std::unordered_map> images; - std::unordered_map> textures; - std::unordered_map> fonts; + std::unordered_map> images; + std::unordered_map> textures; + std::unordered_map> fonts; sf::Music music; float music_volume; @@ -44,17 +44,17 @@ public: /** * Récupère une image préchargée */ - sf::Image& getImage(std::string name); + std::shared_ptr getImage(std::string name); /** * Récupère une texture préchargée */ - sf::Texture& getTexture(std::string name); + std::shared_ptr getTexture(std::string name); /** * Récupère une police préchargée */ - sf::Font& getFont(std::string name); + std::shared_ptr getFont(std::string name); /** * Récupère le chemin vers le fichier du niveau portant le diff --git a/src/block.cpp b/src/block.cpp index 87e4584..7b5d135 100644 --- a/src/block.cpp +++ b/src/block.cpp @@ -47,8 +47,8 @@ void Block::prepareDraw(ResourceManager& resources) { texture_name = "block.tga"; } - sprite.setTexture(resources.getTexture(texture_name)); - select_sprite.setTexture(resources.getTexture("block_select.tga")); + sprite.setTexture(*resources.getTexture(texture_name)); + select_sprite.setTexture(*resources.getTexture("block_select.tga")); } void Block::draw(Level& level) { diff --git a/src/finish_block.cpp b/src/finish_block.cpp index f9c5dcd..9c24a33 100644 --- a/src/finish_block.cpp +++ b/src/finish_block.cpp @@ -14,7 +14,7 @@ Object::Ptr FinishBlock::clone() const { void FinishBlock::prepareDraw(ResourceManager& resources) { Block::prepareDraw(resources); sprite.setOrigin(sf::Vector2f(23, 41)); - sprite.setTexture(resources.getTexture("finish_block.tga"), true); + sprite.setTexture(*resources.getTexture("finish_block.tga"), true); } void FinishBlock::activate(Game& game, Object::Ptr object) { diff --git a/src/gravity_block.cpp b/src/gravity_block.cpp index e792413..8ba9dde 100644 --- a/src/gravity_block.cpp +++ b/src/gravity_block.cpp @@ -45,7 +45,7 @@ void GravityBlock::draw(Level& level) { icon_sprite.setColor(sf::Color(255, 255, 255, opacity)); // on dessine l'icône - icon_sprite.setTexture(level.getResourceManager().getTexture( + icon_sprite.setTexture(*level.getResourceManager().getTexture( texture_name + ".tga" )); diff --git a/src/kill_block.cpp b/src/kill_block.cpp index 80409d9..3643915 100644 --- a/src/kill_block.cpp +++ b/src/kill_block.cpp @@ -14,7 +14,7 @@ Object::Ptr KillBlock::clone() const { void KillBlock::prepareDraw(ResourceManager& resources) { Block::prepareDraw(resources); - sprite.setTexture(resources.getTexture("kill_block.tga")); + sprite.setTexture(*resources.getTexture("kill_block.tga")); } void KillBlock::activate(Game& game, Object::Ptr object) { diff --git a/src/level.cpp b/src/level.cpp index a0fa28d..701cbb2 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -288,10 +288,10 @@ void Level::draw() { // on dessine le fond s'il y en a un if (background != "") { - sf::Texture& bg_texture = getResourceManager().getTexture(background); - sf::Vector2f bg_size = (sf::Vector2f) bg_texture.getSize(); + auto bg_texture = getResourceManager().getTexture(background); + sf::Vector2f bg_size = (sf::Vector2f) bg_texture->getSize(); - background_sprite.setTexture(bg_texture); + background_sprite.setTexture(*bg_texture); // on regarde la position du coin où il faut commencer à // dessiner le fond, et la zone sur laquelle il faut le dessiner diff --git a/src/menu.cpp b/src/menu.cpp index 8140ab8..d28cfad 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -27,7 +27,7 @@ namespace { } Menu::Menu(Manager& manager) : State(manager) { - background.setTexture(getResourceManager().getTexture("bg_menu.tga")); + background.setTexture(*getResourceManager().getTexture("bg_menu.tga")); loadMainMenu(); } @@ -104,7 +104,7 @@ void Menu::frame() { // affichage du menu sf::RenderWindow& window = getWindow(); sf::Vector2f size = (sf::Vector2f) window.getSize(); - sf::Font font = getResourceManager().getFont("raleway.ttf"); + std::shared_ptr font = getResourceManager().getFont("raleway.ttf"); // on s'assure d'être dans la vue par défaut (pas de zoom, 0x0 en haut gauche) getManager().useGUIView(); @@ -137,7 +137,7 @@ void Menu::frame() { labels.clear(); for (unsigned int i = 0; i < choices.size(); i++) { - sf::Text label(choices[i], font, font_size); + sf::Text label(choices[i], *font, font_size); sf::FloatRect text_size = label.getLocalBounds(); sf::Vector2f base_position( @@ -173,10 +173,6 @@ void Menu::loadMainMenu() { actions.clear(); selection = 0; - sf::Texture& texture = getResourceManager().getTexture("bg_menu.tga"); - texture.setSmooth(true); - background.setTexture(texture); - choices.push_back(sf::String(L"Jouer")); actions.push_back(std::bind(&Menu::loadLevelMenu, this)); diff --git a/src/player.cpp b/src/player.cpp index 11ecbd8..a9f5ac1 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -70,12 +70,12 @@ void Player::draw(Level& level) { texture_name = "player_2.tga"; } - sprite.setTexture(&level.getResourceManager().getTexture(texture_name)); + sprite.setTexture(level.getResourceManager().getTexture(texture_name).get()); sprite.setRadius(getRadius()); sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); sprite.setPosition(getPosition()); - shadow_sprite.setTexture(&level.getResourceManager().getTexture("player_shadow.tga")); + shadow_sprite.setTexture(level.getResourceManager().getTexture("player_shadow.tga").get()); shadow_sprite.setRadius(getRadius() - 1); shadow_sprite.setOrigin(sf::Vector2f(getRadius() - 1, getRadius() - 1)); shadow_sprite.setPosition(getPosition()); diff --git a/src/resource_manager.cpp b/src/resource_manager.cpp index 460d105..ce3b590 100644 --- a/src/resource_manager.cpp +++ b/src/resource_manager.cpp @@ -29,8 +29,8 @@ void ResourceManager::preload() { std::string full_path = boost::filesystem::canonical(it->path()).string(); std::string name = it->path().filename().string(); - auto image = std::unique_ptr(new sf::Image); - auto texture = std::unique_ptr(new sf::Texture); + auto image = std::shared_ptr(new sf::Image); + auto texture = std::shared_ptr(new sf::Texture); texture->setSmooth(true); std::cout << "Chargement de l'image " << name << "... "; @@ -60,7 +60,7 @@ void ResourceManager::preload() { std::string full_path = boost::filesystem::canonical(it->path()).string(); std::string name = it->path().filename().string(); - auto font = std::unique_ptr(new sf::Font); + auto font = std::shared_ptr(new sf::Font); std::cout << "Chargement de la police " << name << "... "; if (!font->loadFromFile(full_path)) { @@ -76,34 +76,34 @@ void ResourceManager::preload() { preloaded = true; } -sf::Image& ResourceManager::getImage(std::string name) { +std::shared_ptr ResourceManager::getImage(std::string name) { if (images.count(name) == 0) { throw std::runtime_error( "Impossible de récupérer l'image inexistante : " + name ); } - return *images[name]; + return images[name]; } -sf::Texture& ResourceManager::getTexture(std::string name) { +std::shared_ptr ResourceManager::getTexture(std::string name) { if (textures.count(name) == 0) { throw std::runtime_error( "Impossible de récupérer la texture inexistante : " + name ); } - return *textures[name]; + return textures[name]; } -sf::Font& ResourceManager::getFont(std::string name) { +std::shared_ptr ResourceManager::getFont(std::string name) { if (fonts.count(name) == 0) { throw std::runtime_error( "Impossible de récupérer la police inexistante : " + name ); } - return *fonts[name]; + return fonts[name]; } std::string ResourceManager::getLevelPath(std::string name) { diff --git a/src/rules.cpp b/src/rules.cpp index 6aee4cf..e679ec6 100644 --- a/src/rules.cpp +++ b/src/rules.cpp @@ -2,7 +2,7 @@ #include "manager.hpp" Rules::Rules(Manager& manager) : State(manager) { - background.setTexture(getResourceManager().getTexture("bg_rules.png")); + background.setTexture(*getResourceManager().getTexture("bg_rules.png")); getWindow().setFramerateLimit(Manager::FPS); } diff --git a/src/switch_block.cpp b/src/switch_block.cpp index 43f2465..7045732 100644 --- a/src/switch_block.cpp +++ b/src/switch_block.cpp @@ -24,7 +24,7 @@ void SwitchBlock::draw(Level& level) { icon_sprite.setColor(sf::Color(255, 255, 255, opacity)); // on dessine l'icône - icon_sprite.setTexture(level.getResourceManager().getTexture( + icon_sprite.setTexture(*level.getResourceManager().getTexture( "switch_block.tga" )); diff --git a/src/widget_timer.cpp b/src/widget_timer.cpp index b8f7643..86ca44b 100644 --- a/src/widget_timer.cpp +++ b/src/widget_timer.cpp @@ -8,16 +8,16 @@ WidgetTimer::WidgetTimer(Manager& manager, bool can_change, std::function