Modificado el parser para leer archivos de texto
This commit is contained in:
@@ -13,7 +13,7 @@ void initParam(param_t *param)
|
||||
param->gameHeight = 240;
|
||||
|
||||
// Tamaño para el marcador
|
||||
param->scoreboard = {0, 240 - 32, 320, 32};
|
||||
param->scoreboard = {0, 208, 320, 32};
|
||||
|
||||
// Valores para el FADE_RANDOM_SQUARE
|
||||
param->numSquaresWidth = 80;
|
||||
@@ -24,41 +24,90 @@ void initParam(param_t *param)
|
||||
}
|
||||
|
||||
// Establece valores para los parametros a partir de un fichero de texto
|
||||
bool loadParam(param_t *param, std::string filePath)
|
||||
void loadParam(param_t *param, std::string filePath)
|
||||
{
|
||||
// Pone valores por defecto a las variables
|
||||
initParam(param);
|
||||
|
||||
// Indicador de éxito en la carga
|
||||
bool success = true;
|
||||
|
||||
// Variables para manejar el fichero
|
||||
std::string line;
|
||||
std::ifstream file(filePath);
|
||||
std::string param1;
|
||||
std::string param2;
|
||||
|
||||
// Si el fichero se puede abrir
|
||||
if (file.good())
|
||||
{
|
||||
// Procesa cada linea del fichero
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
// Comprueba que la linea no sea un comentario
|
||||
if (line.substr(0, 1) != "#")
|
||||
// Reinicia variables
|
||||
param1 = "";
|
||||
param2 = "";
|
||||
|
||||
// Elimina los comentarios
|
||||
line = line.substr(0, line.find("#"));
|
||||
|
||||
// Ignora los espacios en blanco
|
||||
int pos = 0;
|
||||
while (pos < (int)line.size() && (int)line[pos] <= 32)
|
||||
{
|
||||
// Encuentra la posición del caracter '='
|
||||
int pos = line.find(" ");
|
||||
// Procesa las dos subcadenas
|
||||
if (!setOptions(param, line.substr(0, pos), line.substr(pos + 1, line.length())))
|
||||
pos++;
|
||||
}
|
||||
|
||||
// Si no ha llegado al final de la linea, es que hay algo escrito (no es una linea vacía)
|
||||
if (pos < (int)line.size())
|
||||
{
|
||||
// Elimina el espacio en blanco
|
||||
line = line.substr(pos, std::string::npos);
|
||||
|
||||
// Se queda con todo lo que no sean espacios en blanco
|
||||
pos = 1;
|
||||
while (pos <= (int)line.size() && (int)line[pos] > 32)
|
||||
{
|
||||
success = false;
|
||||
pos++;
|
||||
}
|
||||
|
||||
// Si llega al final de la linea, falta la segunda palabra
|
||||
if (pos < (int)line.size())
|
||||
{
|
||||
// Se queda con la primera palabra
|
||||
param1 = line.substr(0, pos);
|
||||
|
||||
// Y recorta la linea
|
||||
line = line.substr(pos, std::string::npos);
|
||||
|
||||
// Ignora los espacios en blanco
|
||||
pos = 0;
|
||||
while (pos <= (int)line.size() && (int)line[pos] <= 32)
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
|
||||
// Si llega al final de la linea, falta la segunda palabra
|
||||
if (pos < (int)line.size())
|
||||
{
|
||||
// Elimina el espacio en blanco
|
||||
line = line.substr(pos, std::string::npos);
|
||||
|
||||
// Ignora los espacios en blanco
|
||||
pos = 1;
|
||||
while (pos <= (int)line.size() && (int)line[pos] > 32)
|
||||
{
|
||||
pos++;
|
||||
}
|
||||
// Se queda con la segunda palabra
|
||||
param2 = line.substr(0, pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setOptions(param, param1, param2);
|
||||
}
|
||||
|
||||
// Cierra el fichero
|
||||
file.close();
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
// Asigna variables a partir de dos cadenas
|
||||
@@ -103,6 +152,26 @@ bool setOptions(param_t *param, std::string var, std::string value)
|
||||
param->fadePostDuration = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.x")
|
||||
{
|
||||
param->scoreboard.x = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.y")
|
||||
{
|
||||
param->scoreboard.y = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.w")
|
||||
{
|
||||
param->scoreboard.w = std::stoi(value);
|
||||
}
|
||||
|
||||
else if (var == "scoreboard.h")
|
||||
{
|
||||
param->scoreboard.h = std::stoi(value);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
success = false;
|
||||
|
||||
Reference in New Issue
Block a user