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