fix: updateAlphaColorTexture() en Background class per a utilitzar delta_time
This commit is contained in:
@@ -143,7 +143,7 @@ void Background::update(float delta_time) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza el valor de alpha
|
// Actualiza el valor de alpha
|
||||||
updateAlphaColorTexture();
|
updateAlphaColorTexture(delta_time);
|
||||||
|
|
||||||
// Actualiza las nubes
|
// Actualiza las nubes
|
||||||
updateClouds(delta_time);
|
updateClouds(delta_time);
|
||||||
@@ -488,13 +488,39 @@ void Background::setAlpha(int alpha) {
|
|||||||
alpha_color_texture_ = alpha;
|
alpha_color_texture_ = alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza el valor de alpha
|
// Actualiza el valor de alpha (time-based)
|
||||||
void Background::updateAlphaColorTexture() {
|
void Background::updateAlphaColorTexture(float delta_time) {
|
||||||
|
// 1. Si ya hemos llegado al destino, no hacemos nada.
|
||||||
if (alpha_color_texture_ == previous_alpha_color_texture_) {
|
if (alpha_color_texture_ == previous_alpha_color_texture_) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
alpha_color_texture_ > previous_alpha_color_texture_ ? ++previous_alpha_color_texture_ : --previous_alpha_color_texture_;
|
|
||||||
SDL_SetTextureAlphaMod(color_texture_, previous_alpha_color_texture_);
|
// 2. Define la velocidad del cambio (p. ej., 150 unidades de alfa por segundo).
|
||||||
|
// Puedes ajustar este valor para que la transición sea más rápida o lenta.
|
||||||
|
constexpr float ALPHA_TRANSITION_SPEED = 150.0F;
|
||||||
|
|
||||||
|
// 3. Determina la dirección del cambio (subir o bajar el alfa)
|
||||||
|
if (alpha_color_texture_ > previous_alpha_color_texture_) {
|
||||||
|
// Aumentar el alfa
|
||||||
|
current_alpha_float_ += ALPHA_TRANSITION_SPEED * delta_time;
|
||||||
|
// Nos aseguramos de no pasarnos del objetivo
|
||||||
|
current_alpha_float_ = std::min(current_alpha_float_, static_cast<float>(alpha_color_texture_));
|
||||||
|
} else {
|
||||||
|
// Disminuir el alfa
|
||||||
|
current_alpha_float_ -= ALPHA_TRANSITION_SPEED * delta_time;
|
||||||
|
// Nos aseguramos de no quedarnos cortos del objetivo
|
||||||
|
current_alpha_float_ = std::max(current_alpha_float_, static_cast<float>(alpha_color_texture_));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Actualiza el valor entero solo si ha cambiado lo suficiente
|
||||||
|
// Usamos std::round para un redondeo más natural.
|
||||||
|
const auto new_alpha = static_cast<size_t>(std::round(current_alpha_float_));
|
||||||
|
|
||||||
|
if (new_alpha != previous_alpha_color_texture_) {
|
||||||
|
previous_alpha_color_texture_ = new_alpha;
|
||||||
|
// SDL espera un Uint8 (0-255), así que hacemos un cast seguro.
|
||||||
|
SDL_SetTextureAlphaMod(color_texture_, static_cast<Uint8>(previous_alpha_color_texture_));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Precalcula el vector con el recorrido del sol
|
// Precalcula el vector con el recorrido del sol
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ class Background {
|
|||||||
float progress_ = 0.0F; // Progresión interna
|
float progress_ = 0.0F; // Progresión interna
|
||||||
float clouds_speed_ = 0; // Velocidad de las nubes
|
float clouds_speed_ = 0; // Velocidad de las nubes
|
||||||
float transition_ = 0; // Porcentaje de transición
|
float transition_ = 0; // Porcentaje de transición
|
||||||
|
float current_alpha_float_ = 0.0F; // Acumulador para el valor alfa preciso
|
||||||
size_t gradient_number_ = 0; // Índice de fondo degradado
|
size_t gradient_number_ = 0; // Índice de fondo degradado
|
||||||
size_t alpha_color_texture_ = 0; // Transparencia de atenuación
|
size_t alpha_color_texture_ = 0; // Transparencia de atenuación
|
||||||
size_t previous_alpha_color_texture_ = 0; // Transparencia anterior
|
size_t previous_alpha_color_texture_ = 0; // Transparencia anterior
|
||||||
@@ -121,19 +122,19 @@ class Background {
|
|||||||
float completion_initial_progress_ = 0.0F; // Progreso inicial al entrar en estado completado
|
float completion_initial_progress_ = 0.0F; // Progreso inicial al entrar en estado completado
|
||||||
|
|
||||||
// --- Métodos internos ---
|
// --- Métodos internos ---
|
||||||
void initializePaths(); // Inicializa las rutas del sol y la luna
|
void initializePaths(); // Inicializa las rutas del sol y la luna
|
||||||
void initializeRects(); // Inicializa los rectángulos de gradientes y nubes
|
void initializeRects(); // Inicializa los rectángulos de gradientes y nubes
|
||||||
void initializeSprites(); // Crea los sprites
|
void initializeSprites(); // Crea los sprites
|
||||||
void initializeSpriteProperties(); // Configura las propiedades iniciales de los sprites
|
void initializeSpriteProperties(); // Configura las propiedades iniciales de los sprites
|
||||||
void initializeTextures(); // Inicializa las texturas de renderizado
|
void initializeTextures(); // Inicializa las texturas de renderizado
|
||||||
void updateProgression(float delta_time); // Actualiza la progresión y calcula transiciones
|
void updateProgression(float delta_time); // Actualiza la progresión y calcula transiciones
|
||||||
void updateCloudsSpeed(); // Actualiza la velocidad de las nubes según el estado
|
void updateCloudsSpeed(); // Actualiza la velocidad de las nubes según el estado
|
||||||
void renderGradient(); // Dibuja el gradiente de fondo
|
void renderGradient(); // Dibuja el gradiente de fondo
|
||||||
void renderTopClouds(); // Dibuja las nubes superiores
|
void renderTopClouds(); // Dibuja las nubes superiores
|
||||||
void renderBottomClouds(); // Dibuja las nubes inferiores
|
void renderBottomClouds(); // Dibuja las nubes inferiores
|
||||||
void fillCanvas(); // Compone todos los elementos en la textura
|
void fillCanvas(); // Compone todos los elementos en la textura
|
||||||
void updateAlphaColorTexture(); // Actualiza el alpha de la textura de atenuación
|
void updateAlphaColorTexture(float delta_time); // Actualiza el alpha de la textura de atenuación
|
||||||
void updateClouds(float delta_time); // Actualiza el movimiento de las nubes (time-based)
|
void updateClouds(float delta_time); // Actualiza el movimiento de las nubes (time-based)
|
||||||
void createSunPath(); // Precalcula el recorrido del sol
|
void createSunPath(); // Precalcula el recorrido del sol
|
||||||
void createMoonPath(); // Precalcula el recorrido de la luna
|
void createMoonPath(); // Precalcula el recorrido de la luna
|
||||||
};
|
};
|
||||||
@@ -44,7 +44,7 @@ Director::Director(int argc, std::span<char*> argv) {
|
|||||||
Section::name = Section::Name::GAME;
|
Section::name = Section::Name::GAME;
|
||||||
Section::options = Section::Options::GAME_PLAY_1P;
|
Section::options = Section::Options::GAME_PLAY_1P;
|
||||||
#elif _DEBUG
|
#elif _DEBUG
|
||||||
Section::name = Section::Name::CREDITS;
|
Section::name = Section::Name::HI_SCORE_TABLE;
|
||||||
Section::options = Section::Options::GAME_PLAY_1P;
|
Section::options = Section::Options::GAME_PLAY_1P;
|
||||||
#else // NORMAL GAME
|
#else // NORMAL GAME
|
||||||
Section::name = Section::Name::LOGO;
|
Section::name = Section::Name::LOGO;
|
||||||
|
|||||||
Reference in New Issue
Block a user