Correction erreur (fstream non-copiable et bug de déplacement ressource)

This commit is contained in:
Mattéo Delabre 2016-04-10 09:41:26 +02:00
parent db9f1c1377
commit 15cc531be3
3 changed files with 31 additions and 43 deletions

View File

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

View File

@ -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'};

View File

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