From 00b496957cd8e4634b85239433252fe7293f0a02 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 26 Jun 2025 19:10:10 +0200 Subject: [PATCH] =?UTF-8?q?Intro:=20les=20tarjetes=20tenen=20ara=20el=20bo?= =?UTF-8?q?rde=20red=C3=B3=20Intro:=20el=20fondo=20pot=20ser=20de=20color,?= =?UTF-8?q?=20no=20soles=20blanc=20i=20negre=20Intro:=20intro4.png=20pinta?= =?UTF-8?q?va=20a=20Bal1=20deixant=20un=20pixel=20per=20pintar=20en=20la?= =?UTF-8?q?=20zona=20de=20baix=20Intro:=20modificat=20el=20blend=20mode=20?= =?UTF-8?q?de=20les=20tarjetes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/config/param_320x240.txt | 4 ++-- data/config/param_320x256.txt | 4 ++-- data/gfx/intro/intro4.png | Bin 7025 -> 7074 bytes source/intro.cpp | 32 +++++++++++++++++++++++--------- source/intro.h | 3 ++- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/data/config/param_320x240.txt b/data/config/param_320x240.txt index ce2bb9c..37edd5f 100644 --- a/data/config/param_320x240.txt +++ b/data/config/param_320x240.txt @@ -66,8 +66,8 @@ service_menu.bg_color 000000F0 service_menu.drop_shadow false ## --- INTRO --- -intro.bg_color 000000 -intro.card_color FFFFFF +intro.bg_color 543149 +intro.card_color CBDBFC ## --- DEBUG --- debug.color 00FFFF diff --git a/data/config/param_320x256.txt b/data/config/param_320x256.txt index a2a9cb0..66aef6b 100644 --- a/data/config/param_320x256.txt +++ b/data/config/param_320x256.txt @@ -66,8 +66,8 @@ service_menu.bg_color 000000F0 service_menu.drop_shadow false ## --- INTRO --- -intro.bg_color 000000 -intro.card_color 543149 +intro.bg_color 543149 +intro.card_color CBDBFC ## --- DEBUG --- debug.color 00FFFF diff --git a/data/gfx/intro/intro4.png b/data/gfx/intro/intro4.png index 618788242597796260c06de7bbc68d454cf41d07..15f3a2d293f27ac11b545fce75dded3ec56641b2 100644 GIT binary patch literal 7074 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.3f); - tiled_bg_->setColor(Color(bg_color_, bg_color_, bg_color_)); + tiled_bg_->setColor(bg_color_); } // Comprueba los eventos @@ -341,23 +341,37 @@ void Intro::initSprites() for (int i = 0; i < TOTAL_SPRITES; ++i) { + // Crea la textura auto shadow_texture = std::make_shared(Screen::get()->getRenderer()); shadow_texture->createBlank(SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET); shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND); + // Apuntamos el renderizador a la textura auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer()); shadow_texture->setAsRenderTarget(Screen::get()->getRenderer()); - auto color = param.intro.card_color; - SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, color.a); + // Limpia la textura + SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0, 0, 0, 0); SDL_RenderClear(Screen::get()->getRenderer()); + // Pone color en el marco y el fondo de la textura + auto color = param.intro.card_color; + SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, color.a); + SDL_FRect rect1 = {1, 0, SHADOW_SPRITE_WIDTH - 2, SHADOW_SPRITE_HEIGHT}; + SDL_FRect rect2 = {0, 1, SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT - 2}; + SDL_RenderFillRect(Screen::get()->getRenderer(), &rect1); + SDL_RenderFillRect(Screen::get()->getRenderer(), &rect2); + + // Copia la textura con el dibujo sobre la textura de color aplicando blend modes SDL_FRect rect = {BORDER / 2, BORDER / 2, SPRITE_WIDTH, SPRITE_HEIGHT}; auto inner_texture = Resource::get()->getTexture(TEXTURE_LIST.at(i))->getSDLTexture(); - SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_MOD); + SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_BLEND); + SDL_SetTextureAlphaMod(inner_texture, 64); SDL_RenderTexture(Screen::get()->getRenderer(), inner_texture, nullptr, &rect); SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_NONE); + SDL_SetTextureAlphaMod(inner_texture, 255); + // Deja el renderizador como estaba y añade la textura a la lista SDL_SetRenderTarget(Screen::get()->getRenderer(), temp); shadow_textures.push_back(shadow_texture); } @@ -491,19 +505,19 @@ void Intro::updatePostState() tiled_bg_->stopGracefully(); // Modifica el color del fondo hasta llegar a blanco - if (bg_color_ <= 253) // Garantiza que no se exceda de 255 al incrementar de 2 en 2 + if (bg_color_.r <= 253 || bg_color_.g <= 253 || bg_color_.b <= 253) // Garantiza que no se exceda de 255 al incrementar de 2 en 2 { - bg_color_ += 2; + bg_color_ = bg_color_.lighten(2); } else { - bg_color_ = 255; // Asegura que bg_color_ no exceda el límite máximo + bg_color_ = Color(255, 255, 255); // Asegura que bg_color_ no exceda el límite máximo } - tiled_bg_->setColor(Color(bg_color_, bg_color_, bg_color_)); + tiled_bg_->setColor(bg_color_); } // Cambia de estado si el fondo se ha detenido y recuperado el color - if (tiled_bg_->isStopped() && bg_color_ == 255) + if (tiled_bg_->isStopped() && bg_color_.r == 255 && bg_color_.g == 255 && bg_color_.b == 255) { post_state_ = IntroPostState::END; state_start_time_ = SDL_GetTicks(); diff --git a/source/intro.h b/source/intro.h index 405c77b..2b00a3e 100644 --- a/source/intro.h +++ b/source/intro.h @@ -6,6 +6,7 @@ #include "path_sprite.h" // Para PathSprite #include "tiled_bg.h" // Para TiledBG #include "writer.h" // Para Writer +#include "param.h" /* Esta clase gestiona un estado del programa. Se encarga de mostrar la secuencia @@ -51,7 +52,7 @@ private: IntroState state_ = IntroState::SCENES; // Estado principal de la intro IntroPostState post_state_ = IntroPostState::STOP_BG; // Estado POST Uint32 state_start_time_; // Tiempo de inicio del estado actual - Uint8 bg_color_ = 112; // Color de fondo + Color bg_color_ = param.intro.bg_color; // Color de fondo // --- Métodos internos --- void update(); // Actualiza las variables del objeto