diff --git a/source/lang.cpp b/source/lang.cpp index cada758..9fea0a7 100644 --- a/source/lang.cpp +++ b/source/lang.cpp @@ -116,6 +116,29 @@ namespace Lang } } + // Actualiza los nombres de las dificultades + void updateDifficultyNames() + { + for (auto &difficulty : Options::difficulties) + { + switch (difficulty.code) + { + case Options::DifficultyCode::EASY: + difficulty.name = Lang::getText("[SERVICE_MENU] EASY"); + break; + case Options::DifficultyCode::NORMAL: + difficulty.name = Lang::getText("[SERVICE_MENU] NORMAL"); + break; + case Options::DifficultyCode::HARD: + difficulty.name = Lang::getText("[SERVICE_MENU] HARD"); + break; + default: + difficulty.name = "Unknown"; + break; + } + } + } + // Obtiene una fichero a partir de un lang::Code std::string getLanguageFileName(Lang::Code code) { @@ -134,5 +157,6 @@ namespace Lang Options::settings.language = lang; loadFromFile(Asset::get()->get(getLanguage(lang).file_name)); updateLanguageNames(); + updateDifficultyNames(); } } diff --git a/source/options.cpp b/source/options.cpp index cfdca2c..0ec7b3d 100644 --- a/source/options.cpp +++ b/source/options.cpp @@ -26,7 +26,7 @@ namespace Options {DifficultyCode::HARD, "Hard"}}; // Declaraciones - bool setOptions(const std::string &var, const std::string &value); + bool set(const std::string &var, const std::string &value); // Inicializa las opciones del programa void init() @@ -97,7 +97,7 @@ namespace Options // Encuentra la posición del carácter '=' int pos = line.find("="); // Procesa las dos subcadenas - if (!setOptions(line.substr(0, pos), line.substr(pos + 1, line.length()))) + if (!set(line.substr(0, pos), line.substr(pos + 1, line.length()))) { SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "Unknown parameter: %s", line.substr(0, pos).c_str()); success = false; @@ -200,7 +200,7 @@ namespace Options } // Asigna variables a partir de dos cadenas - bool setOptions(const std::string &var, const std::string &value) + bool set(const std::string &var, const std::string &value) { // Indicador de éxito en la asignación auto success = true; @@ -420,4 +420,15 @@ namespace Options pending_changes.has_pending_changes = false; } } + + DifficultyCode getDifficultyCodeFromName(const std::string &name) + { + for (const auto &difficulty : difficulties) + { + if (difficulty.name == name) + return difficulty.code; + } + // Si no se encuentra, devuelve el primero por defecto + return difficulties[0].code; + } } // namespace Options \ No newline at end of file diff --git a/source/options.h b/source/options.h index 2317cbb..fdd0835 100644 --- a/source/options.h +++ b/source/options.h @@ -126,6 +126,7 @@ namespace Options extern AudioOptions audio; // Opciones de audio extern std::vector controllers; // Opciones de mando para cada jugador extern PendingChanges pending_changes; // Opciones que se aplican al cerrar + extern std::vector difficulties; // --- Funciones de configuración --- void init(); // Inicializa las opciones del programa @@ -137,4 +138,5 @@ namespace Options int getPlayerWhoUsesKeyboard(); // Averigua quién está usando el teclado void applyPendingChanges(); // Aplica los cambios pendientes copiando los valores a sus variables void checkPendingChanges(); + DifficultyCode getDifficultyCodeFromName(const std::string& name); } // namespace Options \ No newline at end of file diff --git a/source/service_menu.cpp b/source/service_menu.cpp index 736e9b8..47116d3 100644 --- a/source/service_menu.cpp +++ b/source/service_menu.cpp @@ -345,7 +345,7 @@ void ServiceMenu::moveBack() selected_ = main_menu_selected_; else selected_ = 0; - + current_settings_group_ = previous_settings_group_; updateMenu(current_settings_group_); setOptionsPosition(); @@ -526,16 +526,28 @@ ServiceMenu::OptionEntry *ServiceMenu::getOptionEntryByCaption(const std::string return nullptr; } -// Ajusta los valores de las opciones tipo lista +// Pone el texto que corresponde al valor de la variable en las opciones de tipo lista void ServiceMenu::AdjustListValues() { - // Idioma - auto option = getOptionEntryByCaption(Lang::getText("[SERVICE_MENU] LANGUAGE")); - for (size_t i = 0; i < option->value_list.size(); ++i) - { - if (Lang::getCodeFromName(option->value_list[i]) == Options::settings.language) + { // Idioma + auto option = getOptionEntryByCaption(Lang::getText("[SERVICE_MENU] LANGUAGE")); + for (size_t i = 0; i < option->value_list.size(); ++i) { - option->list_index = i; + if (Lang::getCodeFromName(option->value_list[i]) == Options::settings.language) + { + option->list_index = i; + } + } + } + + { // Dificultad + auto option = getOptionEntryByCaption(Lang::getText("[SERVICE_MENU] DIFFICULTY")); + for (size_t i = 0; i < option->value_list.size(); ++i) + { + if (Options::getDifficultyCodeFromName(option->value_list[i]) == Options::settings.difficulty) + { + option->list_index = i; + } } } } diff --git a/source/service_menu.h b/source/service_menu.h index 423a105..7c5bc82 100644 --- a/source/service_menu.h +++ b/source/service_menu.h @@ -153,7 +153,7 @@ private: // Dificultad if (linked_variable == &Options::pending_changes.new_difficulty) { - // Options::pending_changes.new_difficulty = + Options::pending_changes.new_difficulty = Options::getDifficultyCodeFromName(value_list[list_index]); Options::checkPendingChanges(); } }