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 6187882..15f3a2d 100644 Binary files a/data/gfx/intro/intro4.png and b/data/gfx/intro/intro4.png differ diff --git a/source/intro.cpp b/source/intro.cpp index de9a054..26fd0ea 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -39,7 +39,7 @@ Intro::Intro() // Configura el fondo tiled_bg_->setSpeed(0.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