-
Notifications
You must be signed in to change notification settings - Fork 0
/
AlmacenDeNiveles.cpp
96 lines (76 loc) · 2.17 KB
/
AlmacenDeNiveles.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "AlmacenDeNiveles.hpp"
#include <iostream>
#include <fstream>
#include <dirent.h>
using namespace std;
const string carpeta = "./Niveles/";
// Este nombre de archivo acaba en .map?
bool acabaEnPuntoMap(const string &ruta)
{
return ruta.size() > 4 && ruta.substr(ruta.size()-4,4) == ".map";
}
// Recorre la carpeta "Niveles", coge todos los archivos acabados en map y los mete en un vector de strings
vector<string> recorrerCarpeta(string nombre)
{
vector<string> archivos;
DIR *dir;
dirent *ent;
if ((dir = opendir (nombre.c_str())) != NULL)
{
while ((ent = readdir (dir)) != NULL)
{
string ruta = nombre + ent->d_name;
if (acabaEnPuntoMap(ruta))
{
archivos.push_back(ruta);
//cout<<ruta<<endl;
}
}
closedir (dir);
}
else
{
throw "No se pudo abrir el directorio";
}
return archivos;
}
void AlmacenDeNiveles::cargarNiveles()
{
niveles.clear();
archivos = recorrerCarpeta(carpeta); // Obtengo todos los archivos acbados en punto map
//Alternativa
//vector<string> archivos = leerIndiceNiveles("./niveles/");
// Preparo el vector de niveles pero no los inicializo, los cargaré de forma peresoza (cuando no tenga más remedio)
// Vease el metodo getNivel() de esta misma clase
niveles.resize(archivos.size());
}
void AlmacenDeNiveles::anyadirNivel(const Nivel & nivel,const string &nombre)
{
string ruta = carpeta+nombre;
nivel.guardarArchivo(ruta.c_str());
niveles.push_back(nivel);
}
void AlmacenDeNiveles::borrarNivel(int opcion)
{
//string ruta = carpeta+nombre;
remove(archivos.at(opcion).c_str());
niveles.erase(niveles.begin()+opcion);
}
/*
vector<string> AlmacenDeNiveles::leerIndiceNiveles(string carpeta)
{
string ind = carpeta+"nivel.index";
string niv;
vector<string> vniveles;
ifstream fin(ind);
if(!fin)throw "Indice de niveles no encontrado";
fin >> nniveles;
fin.ignore();
for(int i = 0; i < nniveles;i++)
{
getline(fin,niv);
niv = carpeta+niv;
vniveles.push_back(niv);
}
return vniveles;
}*/