Intro: les tarjetes tenen ara el borde redó

Intro: el fondo pot ser de color, no soles blanc i negre
Intro: intro4.png pintava a Bal1 deixant un pixel per pintar en la zona de baix
Intro: modificat el blend mode de les tarjetes
This commit is contained in:
2025-06-26 19:10:10 +02:00
parent 1f8588e975
commit 00b496957c
5 changed files with 29 additions and 14 deletions

View File

@@ -66,8 +66,8 @@ service_menu.bg_color 000000F0
service_menu.drop_shadow false service_menu.drop_shadow false
## --- INTRO --- ## --- INTRO ---
intro.bg_color 000000 intro.bg_color 543149
intro.card_color FFFFFF intro.card_color CBDBFC
## --- DEBUG --- ## --- DEBUG ---
debug.color 00FFFF debug.color 00FFFF

View File

@@ -66,8 +66,8 @@ service_menu.bg_color 000000F0
service_menu.drop_shadow false service_menu.drop_shadow false
## --- INTRO --- ## --- INTRO ---
intro.bg_color 000000 intro.bg_color 543149
intro.card_color 543149 intro.card_color CBDBFC
## --- DEBUG --- ## --- DEBUG ---
debug.color 00FFFF debug.color 00FFFF

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -39,7 +39,7 @@ Intro::Intro()
// Configura el fondo // Configura el fondo
tiled_bg_->setSpeed(0.3f); tiled_bg_->setSpeed(0.3f);
tiled_bg_->setColor(Color(bg_color_, bg_color_, bg_color_)); tiled_bg_->setColor(bg_color_);
} }
// Comprueba los eventos // Comprueba los eventos
@@ -341,23 +341,37 @@ void Intro::initSprites()
for (int i = 0; i < TOTAL_SPRITES; ++i) for (int i = 0; i < TOTAL_SPRITES; ++i)
{ {
// Crea la textura
auto shadow_texture = std::make_shared<Texture>(Screen::get()->getRenderer()); auto shadow_texture = std::make_shared<Texture>(Screen::get()->getRenderer());
shadow_texture->createBlank(SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET); shadow_texture->createBlank(SHADOW_SPRITE_WIDTH, SHADOW_SPRITE_HEIGHT, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET);
shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND); shadow_texture->setBlendMode(SDL_BLENDMODE_BLEND);
// Apuntamos el renderizador a la textura
auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer()); auto temp = SDL_GetRenderTarget(Screen::get()->getRenderer());
shadow_texture->setAsRenderTarget(Screen::get()->getRenderer()); shadow_texture->setAsRenderTarget(Screen::get()->getRenderer());
auto color = param.intro.card_color; // Limpia la textura
SDL_SetRenderDrawColor(Screen::get()->getRenderer(), color.r, color.g, color.b, color.a); SDL_SetRenderDrawColor(Screen::get()->getRenderer(), 0, 0, 0, 0);
SDL_RenderClear(Screen::get()->getRenderer()); 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}; SDL_FRect rect = {BORDER / 2, BORDER / 2, SPRITE_WIDTH, SPRITE_HEIGHT};
auto inner_texture = Resource::get()->getTexture(TEXTURE_LIST.at(i))->getSDLTexture(); 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_RenderTexture(Screen::get()->getRenderer(), inner_texture, nullptr, &rect);
SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_NONE); 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); SDL_SetRenderTarget(Screen::get()->getRenderer(), temp);
shadow_textures.push_back(shadow_texture); shadow_textures.push_back(shadow_texture);
} }
@@ -491,19 +505,19 @@ void Intro::updatePostState()
tiled_bg_->stopGracefully(); tiled_bg_->stopGracefully();
// Modifica el color del fondo hasta llegar a blanco // 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 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 // 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; post_state_ = IntroPostState::END;
state_start_time_ = SDL_GetTicks(); state_start_time_ = SDL_GetTicks();

View File

@@ -6,6 +6,7 @@
#include "path_sprite.h" // Para PathSprite #include "path_sprite.h" // Para PathSprite
#include "tiled_bg.h" // Para TiledBG #include "tiled_bg.h" // Para TiledBG
#include "writer.h" // Para Writer #include "writer.h" // Para Writer
#include "param.h"
/* /*
Esta clase gestiona un estado del programa. Se encarga de mostrar la secuencia 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 IntroState state_ = IntroState::SCENES; // Estado principal de la intro
IntroPostState post_state_ = IntroPostState::STOP_BG; // Estado POST IntroPostState post_state_ = IntroPostState::STOP_BG; // Estado POST
Uint32 state_start_time_; // Tiempo de inicio del estado actual 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 --- // --- Métodos internos ---
void update(); // Actualiza las variables del objeto void update(); // Actualiza las variables del objeto