From 9c1b3c45b0bcc028cd550004c71cd9f5c4d40815 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Mon, 10 Mar 2025 21:22:32 +0100 Subject: [PATCH] =?UTF-8?q?Demana=20confirmaci=C3=B3=20per=20a=20canviar?= =?UTF-8?q?=20el=20idioma=20amb=20les=20tecles=20r=C3=A0pides=20Demana=20c?= =?UTF-8?q?onfirmaci=C3=B3=20per=20reiniciar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/lang/ba_BA.txt | 11 +++++++- data/lang/en_UK.txt | 11 +++++++- data/lang/es_ES.txt | 11 +++++++- source/game.cpp | 4 ++- source/global_inputs.cpp | 58 +++++++++++++++++++++++++--------------- source/lang.cpp | 6 ++--- source/lang.h | 4 +-- source/notifier.cpp | 12 ++++++--- source/notifier.h | 7 +++-- source/screen.cpp | 2 +- source/title.cpp | 4 +-- 11 files changed, 92 insertions(+), 38 deletions(-) diff --git a/data/lang/ba_BA.txt b/data/lang/ba_BA.txt index 07911aa..354eb26 100644 --- a/data/lang/ba_BA.txt +++ b/data/lang/ba_BA.txt @@ -371,4 +371,13 @@ GRAFICS DIBUIXATS PER MUSICA COMPOSADA PER ## 124 - CREDITS -EFECTES DE SO \ No newline at end of file +EFECTES DE SO + +## 125 - NOTIFICACIONES +Torna a polsar per reiniciar + +## 126 - NOTIFICACIONES +Torna a polsar per canviar el idioma a + +## 127 - NOTIFICACIONES +Idioma canviat a \ No newline at end of file diff --git a/data/lang/en_UK.txt b/data/lang/en_UK.txt index 2ebe17d..159861d 100644 --- a/data/lang/en_UK.txt +++ b/data/lang/en_UK.txt @@ -371,4 +371,13 @@ PIXELART DRAWN BY MUSIC COMPOSED BY ## 124 - CREDITS -SOUND EFFECTS \ No newline at end of file +SOUND EFFECTS + +## 125 - NOTIFICACIONES +Press again to reset + +## 126 - NOTIFICACIONES +Press again to change languaje to + +## 127 - NOTIFICACIONES +Language set to \ No newline at end of file diff --git a/data/lang/es_ES.txt b/data/lang/es_ES.txt index 5a91f79..e2f4137 100644 --- a/data/lang/es_ES.txt +++ b/data/lang/es_ES.txt @@ -371,4 +371,13 @@ GRAFICOS DIBUJADOS POR MUSICA COMPUESTA POR ## 124 - CREDITS -EFECTOS DE SONIDO \ No newline at end of file +EFECTOS DE SONIDO + +## 125 - NOTIFICACIONES +Vuelve a pulsar para reiniciar + +## 126 - NOTIFICACIONES +Vuelve a pulsar para cambiar el idioma a + +## 127 - NOTIFICACIONES +Idioma cambiado a \ No newline at end of file diff --git a/source/game.cpp b/source/game.cpp index 9433b94..c3880a6 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1268,9 +1268,11 @@ void Game::checkEvents() case SDLK_3: // Activa el modo para pasar el juego automaticamente { auto_pop_balloons_ = !auto_pop_balloons_; - Notifier::get()->showText({"auto advance: " + boolToString(auto_pop_balloons_)}); + Notifier::get()->show({"auto advance: " + boolToString(auto_pop_balloons_)}); if (auto_pop_balloons_) + { balloon_manager_->destroyAllBalloons(); + } balloon_manager_->setDeployBalloons(!auto_pop_balloons_); break; } diff --git a/source/global_inputs.cpp b/source/global_inputs.cpp index 60825f9..c5bf4e9 100644 --- a/source/global_inputs.cpp +++ b/source/global_inputs.cpp @@ -21,9 +21,8 @@ namespace globalInputs // Termina void quit(section::Options code) { - const std::string exit_code = "QUIT"; - auto code_found = stringInVector(Notifier::get()->getCodes(), exit_code); - if (code_found) + 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; @@ -33,10 +32,10 @@ namespace globalInputs { // Si la notificación de salir no está activa, muestra la notificación #ifdef ARCADE - const int index = code == section::Options::QUIT_WITH_CONTROLLER ? 116 : 94; - Notifier::get()->showText({lang::getText(index), std::string()}, -1, exit_code); + const int INDEX = code == section::Options::QUIT_WITH_CONTROLLER ? 116 : 94; + Notifier::get()->showText({lang::getText(INDEX), std::string()}, -1, CODE); #else - Notifier::get()->showText({lang::getText(94), std::string()}, -1, exit_code); + Notifier::get()->show({lang::getText(94), std::string()}, -1, CODE); #endif } } @@ -44,8 +43,16 @@ namespace globalInputs // Reinicia void reset() { - section::name = section::Name::INIT; - Notifier::get()->showText({"Reset"}); + const std::string CODE = "RESET"; + if (Notifier::get()->checkCode(CODE)) + { + section::name = section::Name::INIT; + Notifier::get()->show({"Reset"}); + } + else + { + Notifier::get()->show({lang::getText(125), std::string()}, -1, CODE); + } } // Activa o desactiva el audio @@ -62,7 +69,7 @@ namespace globalInputs JA_SetMusicVolume(0); JA_SetSoundVolume(0); } - Notifier::get()->showText({"Audio " + boolToOnOff(options.audio.enabled)}); + Notifier::get()->show({"Audio " + boolToOnOff(options.audio.enabled)}); } // Obtiene una fichero a partir de un lang::Code @@ -88,13 +95,13 @@ namespace globalInputs switch (code) { case lang::Code::ba_BA: - return "ba_BA"; + return " \"ba_BA\""; break; case lang::Code::es_ES: - return "es_ES"; + return " \"es_ES\""; break; default: - return "en_UK"; + return " \"en_UK\""; break; } } @@ -102,18 +109,27 @@ namespace globalInputs // Cambia el idioma void changeLang() { - options.game.language = lang::change(options.game.language); - lang::loadFromFile(getLangFile(static_cast(options.game.language))); - section::name = section::Name::INIT; - section::options = section::Options::RELOAD; - Notifier::get()->showText({getLangName(options.game.language)}); + const std::string CODE = "LANG"; + if (Notifier::get()->checkCode(CODE)) + { + options.game.language = lang::getNextLangCode(options.game.language); + lang::loadFromFile(getLangFile(static_cast(options.game.language))); + section::name = section::Name::INIT; + section::options = section::Options::RELOAD; + Notifier::get()->show({lang::getText(127) + getLangName(options.game.language)}); + } + else + { + const auto NEXT = lang::getNextLangCode(options.game.language); + Notifier::get()->show({lang::getText(126) + getLangName(NEXT), std::string()}, -1, CODE); + } } // Cambia el modo de disparo void toggleFireMode() { options.game.autofire = !options.game.autofire; - Notifier::get()->showText({"Autofire " + boolToOnOff(options.game.autofire)}); + Notifier::get()->show({"Autofire " + boolToOnOff(options.game.autofire)}); } // Comprueba los inputs que se pueden introducir en cualquier sección del juego @@ -127,7 +143,7 @@ namespace globalInputs { Screen::get()->toggleVideoMode(); const std::string mode = options.video.mode == ScreenVideoMode::WINDOW ? "Window" : "Fullscreen"; - Notifier::get()->showText({mode + " mode"}); + Notifier::get()->show({mode + " mode"}); return; } @@ -136,7 +152,7 @@ namespace globalInputs { Screen::get()->decWindowSize(); const std::string size = std::to_string(options.video.window.size); - Notifier::get()->showText({"Window size x" + size}); + Notifier::get()->show({"Window size x" + size}); return; } @@ -145,7 +161,7 @@ namespace globalInputs { Screen::get()->incWindowSize(); const std::string size = std::to_string(options.video.window.size); - Notifier::get()->showText({"Window size x" + size}); + Notifier::get()->show({"Window size x" + size}); return; } #endif diff --git a/source/lang.cpp b/source/lang.cpp index b0b107b..1e06fa3 100644 --- a/source/lang.cpp +++ b/source/lang.cpp @@ -41,10 +41,10 @@ namespace lang return texts.at(index); } - // Cambia el idioma seleccionado al siguiente idioma disponible - Code change(Code current_lang) + // Obtiene el codigo del idioma del siguiente idioma + Code getNextLangCode(Code lang) { - auto index = static_cast(current_lang); + auto index = static_cast(lang); index = (index + 1) % 3; return static_cast(index); } diff --git a/source/lang.h b/source/lang.h index 851d683..8c5423f 100644 --- a/source/lang.h +++ b/source/lang.h @@ -17,6 +17,6 @@ namespace lang // Obtiene la cadena de texto del indice std::string getText(int index); - // Cambia el idioma seleccionado al siguiente idioma disponible - Code change(Code current_lang); + // Obtiene el codigo del idioma del siguiente idioma + Code getNextLangCode(Code lang); } \ No newline at end of file diff --git a/source/notifier.cpp b/source/notifier.cpp index aacc1f2..9cbdfd7 100644 --- a/source/notifier.cpp +++ b/source/notifier.cpp @@ -153,7 +153,7 @@ void Notifier::clearFinishedNotifications() } } -void Notifier::showText(std::vector texts, int icon, const std::string &code) +void Notifier::show(std::vector texts, int icon, const std::string &code) { // Si no hay texto, acaba if (texts.empty()) @@ -164,7 +164,7 @@ void Notifier::showText(std::vector texts, int icon, const std::str // Si las notificaciones no se apilan, elimina las anteriores if (!stack_) { - clearNotifications(); + clearAllNotifications(); } // Elimina las cadenas vacías @@ -298,7 +298,7 @@ void Notifier::showText(std::vector texts, int icon, const std::str bool Notifier::isActive() { return !notifications_.empty(); } // Finaliza y elimnina todas las notificaciones activas -void Notifier::clearNotifications() +void Notifier::clearAllNotifications() { for (auto ¬ification : notifications_) { @@ -317,4 +317,10 @@ std::vector Notifier::getCodes() codes.emplace_back(notification.code); } return codes; +} + +// Comprueba si hay alguna notificacion con un código +bool Notifier::checkCode(std::string code) +{ + return stringInVector(getCodes(), code); } \ No newline at end of file diff --git a/source/notifier.h b/source/notifier.h index bcf56a4..778ca82 100644 --- a/source/notifier.h +++ b/source/notifier.h @@ -66,7 +66,7 @@ private: void clearFinishedNotifications(); // Finaliza y elimnina todas las notificaciones activas - void clearNotifications(); + void clearAllNotifications(); // [SINGLETON] Ahora el constructor y el destructor son privados, para no poder crear objetos notifier desde fuera @@ -93,11 +93,14 @@ public: void update(); // Muestra una notificación de texto por pantalla - void showText(std::vector texts, int icon = -1, const std::string &code = std::string()); + void show(std::vector texts, int icon = -1, const std::string &code = std::string()); // Indica si hay notificaciones activas bool isActive(); // Obtiene los códigos de las notificaciones std::vector getCodes(); + + // Comprueba si hay alguna notificacion con un código + bool checkCode(std::string code); }; diff --git a/source/screen.cpp b/source/screen.cpp index 07e770d..90f6e5c 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -337,7 +337,7 @@ void Screen::toggleShaders() options.video.shaders = !options.video.shaders; setVideoMode(options.video.mode); const std::string value = options.video.shaders ? "on" : "off"; - Notifier::get()->showText({"Shaders " + value}); + Notifier::get()->show({"Shaders " + value}); } // Activa / desactiva la información de debug diff --git a/source/title.cpp b/source/title.cpp index 8fa5ee9..a9e1027 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -375,7 +375,7 @@ void Title::swapKeyboard() { swapOptionsKeyboard(); std::string text = lang::getText(100) + std::to_string(getPlayerWhoUsesKeyboard()) + ": " + lang::getText(69); - Notifier::get()->showText({text}); + Notifier::get()->show({text}); } // Muestra información sobre los controles y los jugadores @@ -404,5 +404,5 @@ void Title::showControllers() } // Muestra la notificación - Notifier::get()->showText({text.at(0), text.at(1)}); + Notifier::get()->show({text.at(0), text.at(1)}); }