Arreglada la cárrega de opcions i recursos

Modificats els parametros dels fitxers .ani a snake_case
This commit is contained in:
2025-02-26 08:50:12 +01:00
parent a07a08adb7
commit a8e5517a77
67 changed files with 244 additions and 217 deletions

View File

@@ -1,10 +1,13 @@
#include "options.h"
#include <SDL2/SDL_video.h> // for SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSC...
#include <fstream> // for basic_ostream, operator<<, basic_ofstream
#include <functional> // for function
#include <iostream> // for cout, cerr
#include <unordered_map> // for unordered_map, operator==, _Node_const_i...
#include <utility> // for pair
#include <SDL2/SDL_video.h> // for SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSC...
#include <fstream> // for basic_ostream, operator<<, basic_ofstream
#include <functional> // for function
#include <iostream> // for cout, cerr
#include <unordered_map> // for unordered_map, operator==, _Node_const_i...
#include <utility> // for pair
#include <sstream>
#include <string>
#include <algorithm>
// Variables
Options options;
@@ -42,25 +45,35 @@ bool loadOptionsFromFile(const std::string &file_path)
// Si el fichero se puede abrir
if (file.good())
{
// Procesa el fichero linea a linea
// Procesa el fichero línea a línea
if (options.console)
{
std::cout << "Reading file config.txt\n";
}
while (std::getline(file, line))
{
// Comprueba que la linea no sea un comentario
if (line.substr(0, 1) != "#")
// Elimina espacios en blanco iniciales y finales
line = std::string(std::find_if(line.begin(), line.end(), [](int ch) { return !std::isspace(ch); }), line.end());
line.erase(std::find_if(line.rbegin(), line.rend(), [](int ch) { return !std::isspace(ch); }).base(), line.end());
// Ignora líneas vacías o comentarios
if (line.empty() || line[0] == '#')
{
// Encuentra la posición del caracter '='
int pos = line.find("=");
// Procesa las dos subcadenas
if (!setOptions(line.substr(0, pos), line.substr(pos + 1, line.length())))
continue;
}
// Usa un stringstream para dividir la línea en dos partes
std::istringstream iss(line);
std::string key, value;
if (iss >> key >> value)
{
if (!setOptions(key, value))
{
if (options.console)
{
std::cout << "Warning: file config.txt\n";
std::cout << "unknown parameter " << line.substr(0, pos).c_str() << std::endl;
std::cout << "unknown parameter " << key << std::endl;
}
success = false;
}
@@ -74,8 +87,6 @@ bool loadOptionsFromFile(const std::string &file_path)
}
file.close();
}
// El fichero no existe
else
{
// Crea el fichero con los valores por defecto
@@ -87,19 +98,16 @@ bool loadOptionsFromFile(const std::string &file_path)
{
initOptions();
saveOptionsToFile(file_path);
}
// Normaliza los valores
if (options.video.mode != 0 &&
options.video.mode != SDL_WINDOW_FULLSCREEN &&
options.video.mode != SDL_WINDOW_FULLSCREEN_DESKTOP)
{
options.video.mode = 0;
if (options.console)
{
std::cout << "Wrong config file: initializing options.\n\n";
}
}
return success;
}
// Guarda las opciones en un fichero
bool saveOptionsToFile(const std::string &file_path)
{
@@ -122,25 +130,38 @@ bool saveOptionsToFile(const std::string &file_path)
}
// Escribe en el fichero
file << "version=" << options.version << "\n";
file << "# Versión de la configuración\n";
file << "version " << options.version << "\n";
file << "\n## CONTROL\n";
file << "keys=" << static_cast<int>(options.keys) << "\n";
file << "# Esquema de control: 0 = Cursores, 1 = OPQ, 2 = WAD\n";
file << "keys " << static_cast<int>(options.keys) << "\n";
file << "\n## WINDOW\n";
file << "window.zoom=" << options.window.zoom << "\n";
file << "# Zoom de la ventana: 1 = Normal, 2 = Doble, 3 = Triple, ...\n";
file << "window.zoom " << options.window.zoom << "\n";
file << "\n## VIDEO\n";
file << "video.mode=" << options.video.mode << "\n";
file << "video.filter=" << static_cast<int>(options.video.filter) << "\n";
file << "video.shaders=" << boolToString(options.video.shaders) << "\n";
file << "video.vertical_sync=" << boolToString(options.video.vertical_sync) << "\n";
file << "video.integer_scale=" << boolToString(options.video.integer_scale) << "\n";
file << "video.keep_aspect=" << boolToString(options.video.keep_aspect) << "\n";
file << "video.border.enabled=" << boolToString(options.video.border.enabled) << "\n";
file << "video.border.width=" << options.video.border.width << "\n";
file << "video.border.height=" << options.video.border.height << "\n";
file << "video.palette=" << static_cast<int>(options.video.palette) << "\n";
file << "# Modo de video: 0 = Ventana, 1 = Pantalla completa, 2 = Pantalla completa (escritorio)\n";
file << "video.mode " << options.video.mode << "\n";
file << "# Filtro de pantalla: 0 = Nearest, 1 = Linear\n";
file << "video.filter " << static_cast<int>(options.video.filter) << "\n";
file << "# Shaders: 1 = Activado, 0 = Desactivado\n";
file << "video.shaders " << boolToString(options.video.shaders) << "\n";
file << "# Sincronización vertical: 1 = Activado, 0 = Desactivado\n";
file << "video.vertical_sync " << boolToString(options.video.vertical_sync) << "\n";
file << "# Escalado entero: 1 = Activado, 0 = Desactivado\n";
file << "video.integer_scale " << boolToString(options.video.integer_scale) << "\n";
file << "# Mantener aspecto: 1 = Activado, 0 = Desactivado\n";
file << "video.keep_aspect " << boolToString(options.video.keep_aspect) << "\n";
file << "# Borde: 1 = Activado, 0 = Desactivado\n";
file << "video.border.enabled " << boolToString(options.video.border.enabled) << "\n";
file << "# Ancho del borde\n";
file << "video.border.width " << options.video.border.width << "\n";
file << "# Alto del borde\n";
file << "video.border.height " << options.video.border.height << "\n";
file << "# Paleta: 0 = ZX Spectrum, 1 = ZX Arne\n";
file << "video.palette " << static_cast<int>(options.video.palette) << "\n";
// Cierra el fichero
file.close();
@@ -156,10 +177,12 @@ bool setOptions(const std::string &var, const std::string &value)
{ options.version = v; }},
{"keys", [](std::string v)
{ options.keys = static_cast<ControlScheme>(safeStoi(v, static_cast<int>(ControlScheme::CURSOR))); }},
{"video.mode", [](std::string v)
{ options.video.mode = safeStoi(v, 0); }},
{"window.zoom", [](std::string v)
{ options.window.zoom = safeStoi(v, 1); }},
{"video.mode", [](std::string v)
{ options.video.mode = safeStoi(v, 0); }},
{"video.filter", [](std::string v)
{ options.video.filter = static_cast<ScreenFilter>(safeStoi(v, static_cast<int>(DEFAULT_VIDEO_FILTER))); }},
{"video.shaders", [](std::string v)
{ options.video.shaders = stringToBool(v); }},
{"video.vertical_sync", [](std::string v)