From 6c707fa17839546aef3e4ae2e951f28f1bbd58cc Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 12 Jun 2025 20:11:07 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Options:=20afegida=20opci=C3=B3=20per=20a?= =?UTF-8?q?=20permetre=20apagar=20el=20sistema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/lang/ba_BA.json | 2 ++ data/lang/en_UK.json | 2 ++ data/lang/es_ES.json | 2 ++ source/hiscore_table.cpp | 2 +- source/options.cpp | 20 +++++++++++++------- source/options.h | 3 ++- source/resource.cpp | 2 +- source/service_menu.cpp | 3 ++- source/utils.cpp | 3 ++- 9 files changed, 27 insertions(+), 12 deletions(-) diff --git a/data/lang/ba_BA.json b/data/lang/ba_BA.json index ddbf31f..e9f942f 100644 --- a/data/lang/ba_BA.json +++ b/data/lang/ba_BA.json @@ -61,6 +61,8 @@ "[NOTIFICATIONS] 14": "Sincronisme vertical", "[NOTIFICATIONS] 15": "Reiniciar", + "[RESOURCE] LOADING": "Carregant", + "[SERVICE_MENU] TITLE": "Menu de servei", "[SERVICE_MENU] RESET": "Reiniciar", "[SERVICE_MENU] QUIT": "Eixir del joc", diff --git a/data/lang/en_UK.json b/data/lang/en_UK.json index 2133a6a..9635a57 100644 --- a/data/lang/en_UK.json +++ b/data/lang/en_UK.json @@ -61,6 +61,8 @@ "[NOTIFICATIONS] 14": "Vertical Sync", "[NOTIFICATIONS] 15": "Reset", + "[RESOURCE] LOADING": "Loading", + "[SERVICE_MENU] TITLE": "Service Menu", "[SERVICE_MENU] RESET": "Reset", "[SERVICE_MENU] QUIT": "Quit Game", diff --git a/data/lang/es_ES.json b/data/lang/es_ES.json index b653b06..d396c5b 100644 --- a/data/lang/es_ES.json +++ b/data/lang/es_ES.json @@ -61,6 +61,8 @@ "[NOTIFICATIONS] 14": "Sincronismo vertical", "[NOTIFICATIONS] 15": "Reiniciar", + "[RESOURCE] LOADING": "Cargando", + "[SERVICE_MENU] TITLE": "Menu de servicio", "[SERVICE_MENU] RESET": "Reiniciar", "[SERVICE_MENU] QUIT": "Salir del juego", diff --git a/source/hiscore_table.cpp b/source/hiscore_table.cpp index 636269a..264c45a 100644 --- a/source/hiscore_table.cpp +++ b/source/hiscore_table.cpp @@ -51,7 +51,7 @@ HiScoreTable::HiScoreTable() HiScoreTable::~HiScoreTable() { SDL_DestroyTexture(backbuffer_); - options.game.clear_last_hi_score_entries(); + options.game.clearLastHiScoreEntries(); } // Actualiza las variables diff --git a/source/options.cpp b/source/options.cpp index 500938e..e7ab644 100644 --- a/source/options.cpp +++ b/source/options.cpp @@ -39,7 +39,8 @@ void initOptions() options.game.difficulty = GameDifficulty::NORMAL; options.game.language = lang::Code::VALENCIAN; options.game.autofire = true; - options.game.clear_last_hi_score_entries(); + options.game.shutdown_enabled = false; + options.game.clearLastHiScoreEntries(); // Opciones de control options.controllers.clear(); @@ -155,6 +156,7 @@ bool saveOptionsFile(std::string file_path) file << "game.language=" << static_cast(options.game.language) << "\n"; file << "game.difficulty=" << static_cast(options.game.difficulty) << "\n"; file << "game.autofire=" << boolToString(options.game.autofire) << "\n"; + file << "game.shutdown_enabled=" << boolToString(options.game.shutdown_enabled) << "\n"; // Opciones de mandos file << "\n\n## CONTROLLERS\n"; @@ -255,6 +257,10 @@ bool setOptions(const std::string &var, const std::string &value) { options.game.autofire = stringToBool(value); } + else if (var == "game.shutdown_enabled") + { + options.game.shutdown_enabled = stringToBool(value); + } // Opciones de mandos else if (var == "controller.0.name") @@ -379,10 +385,10 @@ int getPlayerWhoUsesKeyboard() // Aplica los cambios pendientes copiando los valores a sus variables void applyPendingChanges() { - if (options.pending_changes.has_pending_changes) - { - options.game.language = options.pending_changes.new_language; - options.game.difficulty = options.pending_changes.new_difficulty; - options.pending_changes.has_pending_changes = false; - } + if (options.pending_changes.has_pending_changes) + { + options.game.language = options.pending_changes.new_language; + options.game.difficulty = options.pending_changes.new_difficulty; + options.pending_changes.has_pending_changes = false; + } } diff --git a/source/options.h b/source/options.h index 6b76d9a..2d94977 100644 --- a/source/options.h +++ b/source/options.h @@ -68,11 +68,12 @@ struct GameOptions GameDifficulty difficulty; // Dificultad del juego lang::Code language; // Idioma usado en el juego bool autofire; // Indicador de autofire + bool shutdown_enabled; // Especifica si se puede apagar el sistema std::vector hi_score_table; // Tabla de mejores puntuaciones std::vector last_hi_score_entry = {-1, -1}; // Últimas posiciones de entrada en la tabla // Reinicia las últimas entradas de puntuación - void clear_last_hi_score_entries() + void clearLastHiScoreEntries() { last_hi_score_entry[0] = -1; last_hi_score_entry[1] = -1; diff --git a/source/resource.cpp b/source/resource.cpp index 2a79fc7..db1c6a4 100644 --- a/source/resource.cpp +++ b/source/resource.cpp @@ -450,7 +450,7 @@ void Resource::renderProgress() loading_text_->write( loading_wired_rect_.x, loading_wired_rect_.y - 9, - "Loading : " + loading_resource_name_ + lang::getText("[RESOURCE] LOADING") + " : " + loading_resource_name_ ); // Renderiza el frame en pantalla diff --git a/source/service_menu.cpp b/source/service_menu.cpp index 2b9f774..76ddac6 100644 --- a/source/service_menu.cpp +++ b/source/service_menu.cpp @@ -327,7 +327,8 @@ void ServiceMenu::initializeOptions() // System options_.emplace_back(lang::getText("[SERVICE_MENU] RESET"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE); options_.emplace_back(lang::getText("[SERVICE_MENU] QUIT"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE); - options_.emplace_back(lang::getText("[SERVICE_MENU] SHUTDOWN"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE); + if (options.game.shutdown_enabled) + options_.emplace_back(lang::getText("[SERVICE_MENU] SHUTDOWN"), SettingsGroup::SYSTEM, OptionBehavior::SELECT, nullptr, ValueType::NONE); // Menu principal options_.emplace_back(lang::getText("[SERVICE_MENU] VIDEO"), SettingsGroup::MAIN, OptionBehavior::SELECT, SettingsGroup::VIDEO); diff --git a/source/utils.cpp b/source/utils.cpp index 140d01b..29c993b 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -117,7 +117,8 @@ bool checkCollision(const SDL_FPoint &p, const SDL_FRect &r) // Convierte una cadena en un valor booleano bool stringToBool(const std::string &str) { - return str == "true"; + std::string s = trim(toLower(str)); + return (s == "true" || s == "1" || s == "yes" || s == "on"); } // Convierte un valor booleano en una cadena From 99ffe9f7a7dcbc9526fb6aa5dac2a2a73024aa8c Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 12 Jun 2025 20:25:59 +0200 Subject: [PATCH 2/2] =?UTF-8?q?New:=20refeta=20la=20l=C3=B2gica=20d'eixir?= =?UTF-8?q?=20o=20apagar=20el=20sistema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/director.cpp | 28 ++++------------------------ source/director.h | 23 ++++++++++------------- source/global_events.cpp | 2 +- source/global_inputs.cpp | 11 +++-------- source/section.h | 6 ++---- source/service_menu.cpp | 4 ++-- 6 files changed, 22 insertions(+), 52 deletions(-) diff --git a/source/director.cpp b/source/director.cpp index c5e506e..d4d1bcf 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -122,10 +122,8 @@ void Director::close() // Libera todos los recursos de SDL SDL_Quit(); -#ifdef ARCADE - // Si está en modo arcade, apaga el sistema si corresponde - shutdownSystem(section::options == section::Options::QUIT_WITH_CONTROLLER); -#endif + // Apaga el sistema + shutdownSystem(section::options == section::Options::SHUTDOWN); } // Carga los parametros @@ -671,26 +669,9 @@ int Director::run() } } - std::string return_code; - switch (section::options) - { - case section::Options::QUIT_WITH_KEYBOARD: - return_code = "with keyboard"; - break; - case section::Options::QUIT_WITH_CONTROLLER: - return_code = "with controller"; - break; - default: - return_code = "from event"; - break; - } - - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "\nGame end %s", return_code.c_str()); - - return (section::options == section::Options::QUIT_WITH_CONTROLLER) ? 1 : 0; + return 0; } -#ifdef ARCADE // Apaga el sistema void Director::shutdownSystem(bool should_shutdown) { @@ -710,5 +691,4 @@ void Director::shutdownSystem(bool should_shutdown) #error "Sistema operativo no soportado" #endif } -} -#endif // ARCADE +} \ No newline at end of file diff --git a/source/director.h b/source/director.h index d3f268e..669d35e 100644 --- a/source/director.h +++ b/source/director.h @@ -9,35 +9,33 @@ namespace lang class Director { public: - // Constructor + // --- Constructor y destructor --- Director(int argc, const char *argv[]); - - // Destructor ~Director(); - // Bucle principal de la aplicación + // --- Bucle principal --- int run(); private: - // Variables internas + // --- Variables internas --- std::string executable_path_; // Ruta del ejecutable std::string system_folder_; // Carpeta del sistema para almacenar datos - // Inicialización y cierre del sistema + // --- Inicialización y cierre del sistema --- void init(); // Inicializa la aplicación void close(); // Cierra y libera recursos - // Configuración inicial + // --- Configuración inicial --- void loadParams(); // Carga los parámetros del programa void loadScoreFile(); // Carga el fichero de puntuaciones void createSystemFolder(const std::string &folder); // Crea la carpeta del sistema - // Gestión de entrada y archivos + // --- Gestión de entrada y archivos --- void bindInputs(); // Asigna botones y teclas al sistema de entrada void setFileList(); // Crea el índice de archivos disponibles void checkProgramArguments(int argc, const char *argv[]); // Verifica los parámetros del programa - // Diferentes secciones del programa + // --- Secciones del programa --- void runLogo(); // Ejecuta la pantalla con el logo void runIntro(); // Ejecuta la introducción del juego void runTitle(); // Ejecuta la pantalla de título @@ -48,10 +46,9 @@ private: void runDemoGame(); // Ejecuta el modo demo void reset(); // Reinicia objetos y vuelve a la sección inicial - // Gestión de archivos de idioma + // --- Gestión de archivos de idioma --- std::string getLangFile(lang::Code code); // Obtiene un fichero de idioma según el código -#ifdef ARCADE - void shutdownSystem(bool should_shutdown); // Apaga el sistema (modo arcade) -#endif + // --- Apagado del sistema --- + void shutdownSystem(bool should_shutdown); // Apaga el sistema }; diff --git a/source/global_events.cpp b/source/global_events.cpp index 4a20fd0..7363aae 100644 --- a/source/global_events.cpp +++ b/source/global_events.cpp @@ -12,7 +12,7 @@ namespace globalEvents { case SDL_EVENT_QUIT: // Evento de salida de la aplicación section::name = section::Name::QUIT; - section::options = section::Options::QUIT_FROM_EVENT; + section::options = section::Options::NONE; return; case SDL_EVENT_RENDER_DEVICE_RESET: diff --git a/source/global_inputs.cpp b/source/global_inputs.cpp index 7e52fbd..4c50212 100644 --- a/source/global_inputs.cpp +++ b/source/global_inputs.cpp @@ -17,24 +17,19 @@ namespace globalInputs { // Termina - void quit(section::Options code) + void quit() { const std::string CODE = "QUIT"; if (Notifier::get()->checkCode(CODE)) { // Si la notificación de salir está activa, cambia de sección section::name = section::Name::QUIT; - section::options = code; + section::options = section::Options::NONE; } else { // Si la notificación de salir no está activa, muestra la notificación -#ifdef ARCADE - const std::string TEXT = code == section::Options::QUIT_WITH_CONTROLLER ? lang::getText("[NOTIFICATIONS] 02") : lang::getText("[NOTIFICATIONS] 01"); - Notifier::get()->show({TEXT, std::string()}, -1, CODE); -#else Notifier::get()->show({lang::getText("[NOTIFICATIONS] 01"), std::string()}, -1, CODE); -#endif } } @@ -356,7 +351,7 @@ namespace globalInputs // Salir if (Input::get()->checkInput(InputAction::EXIT, INPUT_DO_NOT_ALLOW_REPEAT, InputDeviceToUse::KEYBOARD)) { - quit(section::Options::QUIT_WITH_KEYBOARD); + quit(); return; } diff --git a/source/section.h b/source/section.h index ccf65df..75f4fd1 100644 --- a/source/section.h +++ b/source/section.h @@ -11,7 +11,7 @@ namespace section // --- Enumeraciones de secciones del programa --- enum class Name { - RESET, // Inicialización + RESET, // Inicialización LOGO, // Pantalla de logo INTRO, // Introducción TITLE, // Pantalla de título/menú principal @@ -31,11 +31,9 @@ namespace section TITLE_TIME_OUT, // Timeout en el título TITLE_1, // Opción 1 en el título TITLE_2, // Opción 2 en el título - QUIT_WITH_KEYBOARD, // Salir con teclado - QUIT_WITH_CONTROLLER, // Salir con mando - QUIT_FROM_EVENT, // Salir por evento RELOAD, // Recargar sección HI_SCORE_AFTER_PLAYING, // Mostrar récord tras jugar + SHUTDOWN, // Apagar el sistema NONE, // Sin opción }; diff --git a/source/service_menu.cpp b/source/service_menu.cpp index 76ddac6..8483ceb 100644 --- a/source/service_menu.cpp +++ b/source/service_menu.cpp @@ -263,13 +263,13 @@ void ServiceMenu::selectOption() else if (display_options_.at(selected_)->caption == lang::getText("[SERVICE_MENU] QUIT")) { section::name = section::Name::QUIT; - section::options = section::Options::QUIT_WITH_KEYBOARD; + section::options = section::Options::NONE; return; } else if (display_options_.at(selected_)->caption == lang::getText("[SERVICE_MENU] SHUTDOWN")) { section::name = section::Name::QUIT; - section::options = section::Options::QUIT_WITH_CONTROLLER; + section::options = section::Options::SHUTDOWN; return; } return;