Options: load i save ja no necesiten el fitxer com a parametre

This commit is contained in:
2025-06-14 17:57:47 +02:00
parent eee398802f
commit c8999bff68
3 changed files with 29 additions and 25 deletions

View File

@@ -86,11 +86,11 @@ Director::~Director()
void Director::init() void Director::init()
{ {
// Configuración inicial de recursos // Configuración inicial de recursos
Asset::init(executable_path_); // Inicializa el sistema de gestión de archivos Asset::init(executable_path_); // Inicializa el sistema de gestión de archivos
setFileList(); // Crea el índice de archivos setFileList(); // Crea el índice de archivos
Options::loadFromFile(Asset::get()->get("config.txt")); // Carga el archivo de configuración Options::loadFromFile(); // Carga el archivo de configuración
loadParams(); // Carga los parámetros del programa loadParams(); // Carga los parámetros del programa
loadScoreFile(); // Carga el archivo de puntuaciones loadScoreFile(); // Carga el archivo de puntuaciones
// Inicialización de subsistemas principales // Inicialización de subsistemas principales
Lang::setLanguage(Options::settings.language); // Carga el archivo de idioma Lang::setLanguage(Options::settings.language); // Carga el archivo de idioma
@@ -108,7 +108,7 @@ void Director::init()
void Director::close() void Director::close()
{ {
// Guarda las opciones actuales en el archivo de configuración // Guarda las opciones actuales en el archivo de configuración
Options::saveToFile(Asset::get()->get("config.txt")); Options::saveToFile();
// Libera los singletons y recursos en orden inverso al de inicialización // Libera los singletons y recursos en orden inverso al de inicialización
Notifier::destroy(); // Libera el sistema de notificaciones Notifier::destroy(); // Libera el sistema de notificaciones
@@ -617,8 +617,8 @@ void Director::runDemoGame()
// Reinicia objetos y vuelve a la sección inicial // Reinicia objetos y vuelve a la sección inicial
void Director::reset() void Director::reset()
{ {
Options::saveToFile(Asset::get()->get("config.txt")); Options::saveToFile();
Options::loadFromFile(Asset::get()->get("config.txt")); Options::loadFromFile();
Lang::setLanguage(Options::settings.language); Lang::setLanguage(Options::settings.language);
Audio::get()->stopMusic(); Audio::get()->stopMusic();
Audio::get()->stopAllSounds(); Audio::get()->stopAllSounds();

View File

@@ -7,6 +7,7 @@
#include "input.h" // Para InputDeviceToUse #include "input.h" // Para InputDeviceToUse
#include "lang.h" // Para Code #include "lang.h" // Para Code
#include "utils.h" // Para boolToString, stringToBool, getFileName #include "utils.h" // Para boolToString, stringToBool, getFileName
#include "asset.h"
namespace Options namespace Options
{ {
@@ -30,6 +31,7 @@ namespace Options
// Inicializa las opciones del programa // Inicializa las opciones del programa
void init() void init()
{ {
// Opciones de ventana
window.caption = "Coffee Crisis Arcade Edition"; window.caption = "Coffee Crisis Arcade Edition";
window.size = 2; window.size = 2;
@@ -48,12 +50,13 @@ namespace Options
audio.sound.enabled = true; audio.sound.enabled = true;
audio.sound.volume = 50; audio.sound.volume = 50;
// Opciones de juego // Opciones de configuracion
settings.difficulty = DifficultyCode::NORMAL; settings.difficulty = DifficultyCode::NORMAL;
settings.language = Lang::Code::VALENCIAN; settings.language = Lang::Code::VALENCIAN;
settings.autofire = true; settings.autofire = true;
settings.shutdown_enabled = false; settings.shutdown_enabled = false;
settings.clearLastHiScoreEntries(); settings.clearLastHiScoreEntries();
settings.config_file = Asset::get()->get("config.txt");
// Opciones de control // Opciones de control
controllers.clear(); controllers.clear();
@@ -69,7 +72,7 @@ namespace Options
} }
// Carga el fichero de configuración // Carga el fichero de configuración
bool loadFromFile(std::string file_path) bool loadFromFile()
{ {
// Inicializa las opciones del programa // Inicializa las opciones del programa
init(); init();
@@ -78,13 +81,13 @@ namespace Options
bool success = true; bool success = true;
// Variables para manejar el fichero // Variables para manejar el fichero
std::ifstream file(file_path); std::ifstream file(settings.config_file);
// Si el fichero se puede abrir // Si el fichero se puede abrir
if (file.good()) if (file.good())
{ {
// Procesa el fichero línea a línea // Procesa el fichero línea a línea
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(file_path).c_str()); SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nReading file: %s", getFileName(settings.config_file).c_str());
std::string line; std::string line;
while (std::getline(file, line)) while (std::getline(file, line))
{ {
@@ -107,7 +110,7 @@ namespace Options
else else
{ {
// Crea el fichero con los valores por defecto // Crea el fichero con los valores por defecto
saveToFile(file_path); saveToFile();
} }
// Normaliza los valores // Normaliza los valores
@@ -122,17 +125,17 @@ namespace Options
} }
// Guarda el fichero de configuración // Guarda el fichero de configuración
bool saveToFile(std::string file_path) bool saveToFile()
{ {
std::ofstream file(file_path); std::ofstream file(settings.config_file);
if (!file.good()) if (!file.good())
{ {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: %s can't be opened", getFileName(file_path).c_str()); SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error: %s can't be opened", getFileName(settings.config_file).c_str());
return false; return false;
} }
SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(file_path).c_str()); SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Writing file: %s", getFileName(settings.config_file).c_str());
applyPendingChanges(); applyPendingChanges();

View File

@@ -83,6 +83,7 @@ namespace Options
bool shutdown_enabled; // Especifica si se puede apagar el sistema bool shutdown_enabled; // Especifica si se puede apagar el sistema
std::vector<HiScoreEntry> hi_score_table; // Tabla de mejores puntuaciones std::vector<HiScoreEntry> hi_score_table; // Tabla de mejores puntuaciones
std::vector<int> last_hi_score_entry = {-1, -1}; // Últimas posiciones de entrada en la tabla std::vector<int> last_hi_score_entry = {-1, -1}; // Últimas posiciones de entrada en la tabla
std::string config_file; // Ruta al fichero donde guardar la configuracion y las opciones del juego
// Reinicia las últimas entradas de puntuación // Reinicia las últimas entradas de puntuación
void clearLastHiScoreEntries() void clearLastHiScoreEntries()
@@ -127,13 +128,13 @@ namespace Options
extern PendingChanges pending_changes; // Opciones que se aplican al cerrar extern PendingChanges pending_changes; // Opciones que se aplican al cerrar
// --- Funciones de configuración --- // --- Funciones de configuración ---
void init(); // Inicializa las opciones del programa void init(); // Inicializa las opciones del programa
bool loadFromFile(std::string file_path); // Carga el fichero de configuración bool loadFromFile(); // Carga el fichero de configuración
bool saveToFile(std::string file_path); // Guarda el fichero de configuración bool saveToFile(); // Guarda el fichero de configuración
void setKeyboardToPlayer(int player_id); // Asigna el teclado al jugador void setKeyboardToPlayer(int player_id); // Asigna el teclado al jugador
void swapKeyboard(); // Intercambia el teclado de jugador void swapKeyboard(); // Intercambia el teclado de jugador
void swapControllers(); // Intercambia los jugadores asignados a los dos primeros mandos void swapControllers(); // Intercambia los jugadores asignados a los dos primeros mandos
int getPlayerWhoUsesKeyboard(); // Averigua quién está usando el teclado int getPlayerWhoUsesKeyboard(); // Averigua quién está usando el teclado
void applyPendingChanges(); // Aplica los cambios pendientes copiando los valores a sus variables void applyPendingChanges(); // Aplica los cambios pendientes copiando los valores a sus variables
void checkPendingChanges(); void checkPendingChanges();
} // namespace Options } // namespace Options