fix: updateAlphaColorTexture() en Background class per a utilitzar delta_time

This commit is contained in:
2025-10-20 20:54:34 +02:00
parent 8ddee66304
commit 67f9103b96
3 changed files with 48 additions and 21 deletions

View File

@@ -143,7 +143,7 @@ void Background::update(float delta_time) {
}
// Actualiza el valor de alpha
updateAlphaColorTexture();
updateAlphaColorTexture(delta_time);
// Actualiza las nubes
updateClouds(delta_time);
@@ -488,13 +488,39 @@ void Background::setAlpha(int alpha) {
alpha_color_texture_ = alpha;
}
// Actualiza el valor de alpha
void Background::updateAlphaColorTexture() {
// Actualiza el valor de alpha (time-based)
void Background::updateAlphaColorTexture(float delta_time) {
// 1. Si ya hemos llegado al destino, no hacemos nada.
if (alpha_color_texture_ == previous_alpha_color_texture_) {
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