From 15cc531be329aa21718c48a4179d40a7a9594837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Sun, 10 Apr 2016 09:41:26 +0200 Subject: [PATCH] =?UTF-8?q?Correction=20erreur=20(fstream=20non-copiable?= =?UTF-8?q?=20et=20bug=20de=20d=C3=A9placement=20ressource)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/resource_manager.hpp | 10 +++------- src/level.cpp | 28 ++++++++++++++++++++++++++-- src/resource_manager.cpp | 36 ++---------------------------------- 3 files changed, 31 insertions(+), 43 deletions(-) diff --git a/include/resource_manager.hpp b/include/resource_manager.hpp index 90b9d39..f8c85fb 100644 --- a/include/resource_manager.hpp +++ b/include/resource_manager.hpp @@ -43,14 +43,10 @@ public: sf::Font& getFont(std::string name); /** - * Récupère un lecteur de fichier vers le niveau donné + * Récupère le chemin vers le fichier du niveau portant le + * nom passé en argument */ - std::ifstream getLevelReader(std::string name); - - /** - * Récupère un jacob de fichier vers le niveau donné - */ - std::ofstream getLevelWriter(std::string name); + std::string getLevelPath(std::string name); /** * Démarre la musique de fond donnée diff --git a/src/level.cpp b/src/level.cpp index 2c162bb..487fdb1 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -38,7 +38,19 @@ Level::Level(Manager& manager) : State(manager) {} Level::~Level() {} void Level::load(std::string filename) { - std::ifstream file = getResourceManager().getLevelReader(filename); + std::ifstream file; + file.open( + getResourceManager().getLevelPath(filename), + std::ios::binary | std::ios::in + ); + + // on vérifie que le fichier ait correctement été ouvert en lecture + if (file.fail()) { + throw std::runtime_error( + "Impossible de charger le niveau \"" + name + "\" " + + "(" + std::string(strerror(errno)) + ")" + ); + } // vidage du niveau précédent et positionnement // de la caméra au centre du niveau @@ -119,7 +131,19 @@ void Level::load(std::string filename) { } void Level::save(std::string filename) { - std::ofstream file = getResourceManager().getLevelWriter(filename); + std::ofstream file; + file.open( + getResourceManager().getLevelPath(filename), + std::ios::binary | std::ios::out + ); + + // on vérifie que le fichier ait correctement été ouvert en lecture + if (file.fail()) { + throw std::runtime_error( + "Impossible d'enregistrer le niveau \"" + name + "\" " + + "(" + std::string(strerror(errno)) + ")" + ); + } // écriture de la signture du fichier ("BAR") char signature[3] = {'B', 'A', 'R'}; diff --git a/src/resource_manager.cpp b/src/resource_manager.cpp index 6be7d01..5df6c9b 100644 --- a/src/resource_manager.cpp +++ b/src/resource_manager.cpp @@ -73,40 +73,8 @@ sf::Font& ResourceManager::getFont(std::string name) { return *fonts[name]; } -std::ifstream ResourceManager::getLevelReader(std::string name) { - std::ifstream reader; - reader.open( - resources_dir + SEP + "levels" + SEP + name, - std::ios::binary | std::ios::in - ); - - // on vérifie que le fichier ait correctement été ouvert en lecture - if (reader.fail()) { - throw std::runtime_error( - "Impossible de charger le niveau \"" + name + "\" " + - "(" + std::string(strerror(errno)) + ")" - ); - } - - return reader; -} - -std::ofstream ResourceManager::getLevelWriter(std::string name) { - std::ofstream writer; - writer.open( - resources_dir + SEP + "levels" + SEP + name, - std::ios::binary | std::ios::out - ); - - // on vérifie que le fichier ait correctement été ouvert en écriture - if (writer.fail()) { - throw std::runtime_error( - "Impossible d'écrire le niveau '" + name + "' " + - "(" + std::string(strerror(errno)) + ")" - ); - } - - return writer; +std::string ResourceManager::getLevelPath(std::string name) { + return resources_dir + SEP + "levels" + SEP + name; } void ResourceManager::playMusic(std::string name) {