From 982db7f75b3edbe395b8654b2de68f5b0ea553b9 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 6 Mar 2025 14:07:47 +0100 Subject: [PATCH] Ja carrega la ultima paleta seleccionada --- source/options.cpp | 2 +- source/screen.cpp | 22 +++++++++++++++++++--- source/screen.h | 3 +++ source/utils.cpp | 30 ++++++++++-------------------- source/utils.h | 4 ++-- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/source/options.cpp b/source/options.cpp index 390ef4d..b03fd68 100644 --- a/source/options.cpp +++ b/source/options.cpp @@ -270,7 +270,7 @@ bool setOptions(const std::string &var, const std::string &value) } else { - options.video.palette = DEFAULT_PALETTE; + options.video.palette = val; } }}}; diff --git a/source/screen.cpp b/source/screen.cpp index f61d1fd..b6356f2 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -46,6 +46,7 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer) // Ajusta los tamaños adjustGameCanvasRect(); adjustWindowSize(); + current_palette_ = findPalette(options.video.palette); // Define el color del borde para el modo de pantalla completa border_color_ = 1; @@ -77,11 +78,11 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer) // Crea la surface donde se dibujan los graficos del juego game_surface_ = std::make_shared(options.game.width, options.game.height); - game_surface_->loadPalette(palettes_.front()); + game_surface_->loadPalette(palettes_.at(current_palette_)); // Crea la surface donde se dibujan los graficos del juego border_surface_ = std::make_shared(options.game.width + options.video.border.width * 2, options.game.height + options.video.border.height * 2); - border_surface_->loadPalette(palettes_.front()); + border_surface_->loadPalette(palettes_.at(current_palette_)); // Establece la surface que actuará como renderer para recibir las llamadas a render() renderer_surface_ = std::make_shared>(game_surface_); @@ -403,4 +404,19 @@ void Screen::textureToRenderer() void Screen::renderOverlays() { renderNotifications(); -} \ No newline at end of file +} + +// Localiza la paleta dentro del vector de paletas +size_t Screen::findPalette(const std::string &name) +{ + std::string upper_name = toUpper(name + ".gif"); + + for (size_t i = 0; i < palettes_.size(); ++i) + { + if (toUpper(getFileName(palettes_[i])) == upper_name) + { + return i; + } + } + return static_cast(0); +} diff --git a/source/screen.h b/source/screen.h index 3dec929..d7930c2 100644 --- a/source/screen.h +++ b/source/screen.h @@ -70,6 +70,9 @@ private: // Renderiza todos los overlays void renderOverlays(); + // Localiza la paleta dentro del vector de paletas + size_t findPalette(const std::string& name); + // Constructor Screen(SDL_Window *window, SDL_Renderer *renderer); diff --git a/source/utils.cpp b/source/utils.cpp index db6da66..4764e78 100644 --- a/source/utils.cpp +++ b/source/utils.cpp @@ -431,30 +431,20 @@ bool colorAreEqual(Color color1, Color color2) return (r && g && b); } -// Convierte una cadena a minúsculas -std::string toLower(std::string str) +// Función para convertir un string a minúsculas +std::string toLower(const std::string &str) { - for (char &c : str) - { - if (c >= 'A' && c <= 'Z') - { - c += 32; // Convierte a minúscula - } - } - return str; + std::string lower_str = str; + std::transform(lower_str.begin(), lower_str.end(), lower_str.begin(), ::tolower); + return lower_str; } -// Convierte una cadena a mayúsculas -std::string toUpper(std::string str) +// Función para convertir un string a mayúsculas +std::string toUpper(const std::string &str) { - for (char &c : str) - { - if (c >= 'a' && c <= 'z') - { - c -= 32; // Convierte a mayúscula - } - } - return str; + std::string upper_str = str; + std::transform(upper_str.begin(), upper_str.end(), upper_str.begin(), ::toupper); + return upper_str; } // Obtiene el nombre de un fichero a partir de una ruta completa diff --git a/source/utils.h b/source/utils.h index a7d5aee..2e84a42 100644 --- a/source/utils.h +++ b/source/utils.h @@ -105,10 +105,10 @@ std::string boolToString(bool value); bool colorAreEqual(Color color1, Color color2); // Convierte una cadena a minusculas -std::string toLower(std::string str); +std::string toLower(const std::string& str); // Convierte una cadena a mayúsculas -std::string toUpper(std::string str); +std::string toUpper(const std::string& str); // Obtiene el nombre de un fichero a partir de una ruta std::string getFileName(const std::string &path);