Modificado el metodo de carga de habitaciones

This commit is contained in:
2022-07-11 09:37:58 +02:00
parent 6059a3b894
commit 783689c368
8 changed files with 152 additions and 16 deletions

View File

@@ -56,7 +56,7 @@ bool Room::load(std::string _file_path)
printf("Reading file %s\n", filename.c_str());
while (std::getline(file, line))
{
// Si la linea contiene el texto [enemy] se realiza un proceso distinto
// Si la linea contiene el texto [enemy] se realiza el proceso de carga de un enemigo
if (line == "[enemy]")
{
enemy_t enemy;
@@ -80,6 +80,84 @@ bool Room::load(std::string _file_path)
// Añade el enemigo al vector de enemigos
enemy_list.push_back(new Enemy(enemy));
}
// Si la linea contiene el texto [tilemap] se realiza el proceso de carga del fichero tmx
else if (line == "[tilemap]")
{
//printf("Loading tilemap...\n");
do
{
std::getline(file, line);
if (line.find(".tmx") != std::string::npos)
{
//printf("Reading file %s\n", asset->get(line).c_str());
std::ifstream file2(asset->get(line)); // Abre el fichero tmx
if (file2.good())
{
bool data_read = false;
while (std::getline(file2, line)) // Lee el fichero linea a linea
{
if (!data_read)
{ // Lee lineas hasta que encuentre donde empiezan los datos del mapa
int pos = 0;
do
{
std::getline(file2, line);
//printf("parsing: %s\n", line.c_str());
pos = line.find("data encoding");
//printf("pos: %i\n", pos);
} while (pos == std::string::npos);
do
{ // Se introducen los valores separados por comas en un vector
data_read = true;
std::getline(file2, line);
if (line != "</data>")
{
//printf("data: %s\n", line.c_str());
std::stringstream ss(line);
std::string tmp;
while (getline(ss, tmp, ','))
{
//printf("tile: %s\n", tmp.c_str());
tilemap.push_back(std::stoi(tmp));
}
}
} while (line != "</data>");
}
}
}
}
} while (line != "[tilemap-end]");
}
// Si la linea contiene el texto [item] se realiza el proceso de carga de un item
else if (line == "[item]")
{
// enemy_t enemy;
// enemy.asset = asset;
// enemy.renderer = renderer;
do
{
std::getline(file, line);
// Encuentra la posición del caracter '='
int pos = line.find("=");
// Procesa las dos subcadenas
// if (!setEnemy(&enemy, line.substr(0, pos), line.substr(pos + 1, line.length())))
//{
// printf("Warning: file %s\n, unknown parameter \"%s\"\n", filename.c_str(), line.substr(0, pos).c_str());
// success = false;
//}
} while (line != "[item-end]");
// Añade el enemigo al vector de enemigos
// enemy_list.push_back(new Enemy(enemy));
}
// En caso contrario se parsea el fichero para buscar las variables y los valores
else
{
@@ -114,11 +192,7 @@ bool Room::setVars(std::string _var, std::string _value)
// Indicador de éxito en la asignación
bool success = true;
if (_var == "id")
{
id = _value;
}
else if (_var == "name")
if (_var == "name")
{
name = _value;
}
@@ -156,6 +230,9 @@ bool Room::setVars(std::string _var, std::string _value)
tilemap.push_back(std::stoi(tmp));
}
}
else if (_var == "")
{
}
else
{
success = false;
@@ -210,6 +287,9 @@ bool Room::setEnemy(enemy_t *enemy, std::string _var, std::string _value)
{
enemy->color = stringToColor(_value);
}
else if (_var == "[enemy-end]")
{
}
else
{
success = false;