fix: powerball perdia la rotació en passar Game::startAllBalloons (post rellotge); setStop sincronitza ara la rotació
This commit is contained in:
@@ -212,14 +212,12 @@ Balloon::Balloon(float x, float y, Uint8 kind, float velx, float speed, Uint16 c
|
||||
// Amenaza que genera el globo
|
||||
menace_ = 0;
|
||||
|
||||
// Añade rotación al sprite
|
||||
sprite_->setRotate(false);
|
||||
sprite_->setRotateSpeed(0);
|
||||
if (vel_x_ > 0.0F) {
|
||||
sprite_->setRotateAmount(2.0);
|
||||
} else {
|
||||
sprite_->setRotateAmount(-2.0);
|
||||
}
|
||||
// Configura la rotació del sprite. L'activació/desactivació es
|
||||
// delega a `setStop()`, que la sincronitza amb l'estat stopped_
|
||||
// sempre que canvia. setRotateSpeed(1) evita la UB del `counter_
|
||||
// % 0` dins MovingSprite::rotate().
|
||||
sprite_->setRotateSpeed(1);
|
||||
sprite_->setRotateAmount(vel_x_ > 0.0F ? 2.0 : -2.0);
|
||||
|
||||
break;
|
||||
|
||||
@@ -536,34 +534,21 @@ void Balloon::updateStateBeingCreated() {
|
||||
// El contador ha llegado a cero
|
||||
else {
|
||||
setBeingCreated(false);
|
||||
setStop(false);
|
||||
setStop(false); // reactiva la rotació de la PowerBall si escau
|
||||
setVisible(true);
|
||||
setInvulnerable(false);
|
||||
if (kind_ == POWER_BALL) {
|
||||
sprite_->setRotate(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Rama de updateState: globo detenido (no creándose)
|
||||
void Balloon::updateStateStopped() {
|
||||
// Si es una powerball deja de rodar
|
||||
if (kind_ == POWER_BALL) {
|
||||
sprite_->setRotate(false);
|
||||
}
|
||||
|
||||
// Reduce el contador
|
||||
if (stopped_counter_ > 0) {
|
||||
stopped_counter_--;
|
||||
}
|
||||
// Quitarles el estado "detenido" si no estan explosionando
|
||||
else if (!isPopping()) {
|
||||
// Si es una powerball vuelve a rodar
|
||||
if (kind_ == POWER_BALL) {
|
||||
sprite_->setRotate(true);
|
||||
}
|
||||
|
||||
setStop(false);
|
||||
setStop(false); // reactiva la rotació de la PowerBall si escau
|
||||
}
|
||||
}
|
||||
|
||||
@@ -655,9 +640,15 @@ auto Balloon::getClass() const -> Uint8 {
|
||||
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) {
|
||||
stopped_ = state;
|
||||
if (kind_ == POWER_BALL) {
|
||||
sprite_->setRotate(!stopped_);
|
||||
}
|
||||
}
|
||||
|
||||
// Obtiene del valor de la variable
|
||||
|
||||
Reference in New Issue
Block a user