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
|
// 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
|
||||||
|
|||||||
Reference in New Issue
Block a user