tiled_bg.cpp, afegit changeSpeedTo()
This commit is contained in:
@@ -83,6 +83,7 @@ void TiledBG::render() {
|
||||
|
||||
// Actualiza la lógica de la clase (time-based)
|
||||
void TiledBG::update(float delta_time) {
|
||||
updateSpeedChange(delta_time);
|
||||
updateDesp(delta_time);
|
||||
updateStop(delta_time);
|
||||
|
||||
@@ -129,4 +130,40 @@ void TiledBG::updateStop(float delta_time) {
|
||||
stopping_ = false; // Desactivamos el estado de "stopping"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cambia la velocidad gradualmente en X segundos
|
||||
void TiledBG::changeSpeedTo(float target_speed, float duration_s) {
|
||||
if (duration_s <= 0.0f) {
|
||||
// Si la duración es 0 o negativa, cambia inmediatamente
|
||||
speed_ = target_speed;
|
||||
changing_speed_ = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Configurar el cambio gradual
|
||||
changing_speed_ = true;
|
||||
initial_speed_ = speed_;
|
||||
target_speed_ = target_speed;
|
||||
change_duration_s_ = duration_s;
|
||||
change_timer_s_ = 0.0f;
|
||||
}
|
||||
|
||||
// Actualiza el cambio gradual de velocidad (time-based)
|
||||
void TiledBG::updateSpeedChange(float delta_time) {
|
||||
if (!changing_speed_) {
|
||||
return;
|
||||
}
|
||||
|
||||
change_timer_s_ += delta_time;
|
||||
|
||||
if (change_timer_s_ >= change_duration_s_) {
|
||||
// Cambio completado
|
||||
speed_ = target_speed_;
|
||||
changing_speed_ = false;
|
||||
} else {
|
||||
// Interpolación lineal entre velocidad inicial y objetivo
|
||||
float progress = change_timer_s_ / change_duration_s_;
|
||||
speed_ = initial_speed_ + (target_speed_ - initial_speed_) * progress;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user