From 60c926a9c97806d666f25c7cbf62fa177d707a84 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 6 Mar 2025 11:45:06 +0100 Subject: [PATCH] Ja funciona la roda de paletes --- source/global_inputs.cpp | 3 +-- source/screen.cpp | 27 +++++++++++++++++++++++++-- source/screen.h | 3 +++ 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/source/global_inputs.cpp b/source/global_inputs.cpp index d4f776a..40361dd 100644 --- a/source/global_inputs.cpp +++ b/source/global_inputs.cpp @@ -27,7 +27,6 @@ namespace globalInputs // Cambia la paleta de colores void switchPalette() { - //options.video.palette = options.video.palette == Palette::ZXSPECTRUM ? Palette::ZXARNE : Palette::ZXSPECTRUM; Screen::get()->nextPalette(); } @@ -102,7 +101,7 @@ namespace globalInputs else if (Input::get()->checkInput(InputAction::TOGGLE_PALETTE, REPEAT_FALSE)) { switchPalette(); - //Notifier::get()->show({"PALETTE " + std::string(options.video.palette == Palette::ZXSPECTRUM ? "ZX SPECTRUM" : "ZX ARNE")}, NotificationText::CENTER); + Notifier::get()->show({"PALETTE " + options.video.palette}, NotificationText::CENTER); } } } \ No newline at end of file diff --git a/source/screen.cpp b/source/screen.cpp index d17ef93..c06981a 100644 --- a/source/screen.cpp +++ b/source/screen.cpp @@ -92,6 +92,9 @@ Screen::Screen(SDL_Window *window, SDL_Renderer *renderer) // Muestra la ventana SDL_SetWindowPosition(window_, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); show(); + + // Extrae el nombre de las paletas desde su ruta + processPaletteList(); } // Destructor @@ -130,12 +133,11 @@ void Screen::startDrawOnBorder() void Screen::render() { // Renderiza sobre game_surface_ los overlays - //renderNotifications(); + renderNotifications(); // Copia la surface a game_texture_ game_surface_->copyToTexture(renderer_, game_texture_); - // Si está el borde activo, vuelca gameCanvas sobre borderCanvas if (options.video.border.enabled) { @@ -398,4 +400,25 @@ void Screen::nextPalette() game_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_))); border_surface_->loadPalette(Resource::get()->getPalette(palettes_.at(current_palette_))); + + options.video.palette = palettes_.at(current_palette_); + + // Eliminar ".gif" + size_t pos = options.video.palette.find(".gif"); + if (pos != std::string::npos) + { + options.video.palette.erase(pos, 4); + } + + // Convertir a mayúsculas + std::transform(options.video.palette.begin(), options.video.palette.end(), options.video.palette.begin(), ::toupper); +} + +// Extrae los nombres de las paletas +void Screen::processPaletteList() +{ + for (auto &palette : palettes_) + { + palette = getFileName(palette); + } } \ No newline at end of file diff --git a/source/screen.h b/source/screen.h index 906c456..6362b51 100644 --- a/source/screen.h +++ b/source/screen.h @@ -63,6 +63,9 @@ private: // Reinicia los shaders void resetShaders(); + // Extrae los nombres de las paletas + void processPaletteList(); + // Constructor Screen(SDL_Window *window, SDL_Renderer *renderer);