fix: powerball perdia la rotació en passar Game::startAllBalloons (post rellotge); setStop sincronitza ara la rotació

This commit is contained in:
2026-05-18 17:37:45 +02:00
parent 3ac495f444
commit 77718d4515
+15 -24
View File
@@ -212,14 +212,12 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c
// Amenaza que genera el globo // Amenaza que genera el globo
menace_ = 0; menace_ = 0;
// Añade rotación al sprite // Configura la rotació del sprite. L'activació/desactivació es
sprite_->setRotate(false); // delega a `setStop()`, que la sincronitza amb l'estat stopped_
sprite_->setRotateSpeed(0); // sempre que canvia. setRotateSpeed(1) evita la UB del `counter_
if (vel_x_ > 0.0F) { // % 0` dins MovingSprite::rotate().
sprite_->setRotateAmount(2.0); sprite_->setRotateSpeed(1);
} else { sprite_->setRotateAmount(vel_x_ > 0.0F ? 2.0 : -2.0);
sprite_->setRotateAmount(-2.0);
}
break; break;
@@ -536,34 +534,21 @@ void Balloon::updateStateBeingCreated() {
// El contador ha llegado a cero // El contador ha llegado a cero
else { else {
setBeingCreated(false); setBeingCreated(false);
setStop(false); setStop(false); // reactiva la rotació de la PowerBall si escau
setVisible(true); setVisible(true);
setInvulnerable(false); setInvulnerable(false);
if (kind_ == POWER_BALL) {
sprite_->setRotate(true);
}
} }
} }
// Rama de updateState: globo detenido (no creándose) // Rama de updateState: globo detenido (no creándose)
void Balloon::updateStateStopped() { void Balloon::updateStateStopped() {
// Si es una powerball deja de rodar
if (kind_ == POWER_BALL) {
sprite_->setRotate(false);
}
// Reduce el contador // Reduce el contador
if (stopped_counter_ > 0) { if (stopped_counter_ > 0) {
stopped_counter_--; stopped_counter_--;
} }
// Quitarles el estado "detenido" si no estan explosionando // Quitarles el estado "detenido" si no estan explosionando
else if (!isPopping()) { else if (!isPopping()) {
// Si es una powerball vuelve a rodar setStop(false); // reactiva la rotació de la PowerBall si escau
if (kind_ == POWER_BALL) {
sprite_->setRotate(true);
}
setStop(false);
} }
} }
@@ -655,9 +640,15 @@ auto Balloon::getClass() const -> Uint8 {
return BALLOON_CLASS; return BALLOON_CLASS;
} }
// Establece el valor de la variable // Establece el valor de la variable. Per a la PowerBall sincronitza la
// rotació del sprite: stopped=true ⇒ no roda, stopped=false ⇒ roda. Així,
// vingui d'on vingui la crida (FSM intern, Game::stopAll/startAllBalloons,
// fi de creació, etc.), la rotació sempre queda coherent amb l'estat.
void Balloon::setStop(bool state) { void Balloon::setStop(bool state) {
stopped_ = state; stopped_ = state;
if (kind_ == POWER_BALL) {
sprite_->setRotate(!stopped_);
}
} }
// Obtiene del valor de la variable // Obtiene del valor de la variable