Files
coffee_crisis_arcade_edition/source/load_param.cpp

206 lines
4.2 KiB
C++

#include "load_param.h"
#include <iostream>
#include <fstream>
// Asigna variables a partir de dos cadenas
bool setOptions(param_t *param, std::string var, std::string value);
// Establece valores por defecto a las variables
void initParam(param_t *param)
{
// Tamaño original del juego
param->gameWidth = 320;
param->gameHeight = 240;
param->itemSize = 20;
// Tamaño para el marcador
param->scoreboard = {0, 208, 320, 32};
// Valores para el FADE_RANDOM_SQUARE
param->numSquaresWidth = 80;
param->numSquaresHeight = 60;
param->fadeRandomSquaresDelay = 1;
param->fadeRandomSquaresMult = 8;
param->fadePostDuration = 20;
param->venetianSize = 16;
// Posició del texto para empezar a jugar
param->pressStart = 180;
}
// Establece valores para los parametros a partir de un fichero de texto
void loadParam(param_t *param, std::string filePath)
{
// Pone valores por defecto a las variables
initParam(param);
// 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))
{
// 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)
{
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)
{
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();
}
}
// Asigna variables a partir de dos cadenas
bool setOptions(param_t *param, std::string var, std::string value)
{
// Indicador de éxito en la asignación
bool success = true;
// Opciones de video
if (var == "gameWidth")
{
param->gameWidth = std::stoi(value);
}
else if (var == "gameHeight")
{
param->gameHeight = std::stoi(value);
}
else if (var == "itemSize")
{
param->itemSize = std::stoi(value);
}
else if (var == "numSquaresWidth")
{
param->numSquaresWidth = std::stoi(value);
}
else if (var == "numSquaresHeight")
{
param->numSquaresHeight = std::stoi(value);
}
else if (var == "fadeRandomSquaresDelay")
{
param->fadeRandomSquaresDelay = std::stoi(value);
}
else if (var == "fadeRandomSquaresMult")
{
param->fadeRandomSquaresMult = std::stoi(value);
}
else if (var == "fadePostDuration")
{
param->fadePostDuration = std::stoi(value);
}
else if (var == "venetianSize")
{
param->venetianSize = 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 if (var == "pressStart")
{
param->pressStart = std::stoi(value);
}
else if (var == "titleCounter")
{
param->titleCounter = std::stoi(value);
}
else
{
success = false;
}
return success;
}