game_logo: readability-function-cognitive-complexity

This commit is contained in:
2025-07-23 17:12:56 +02:00
parent af574c356c
commit 2db2ba420a
3 changed files with 167 additions and 96 deletions

View File

@@ -111,98 +111,138 @@ void GameLogo::render() {
// Actualiza la lógica de la clase
void GameLogo::update() {
updateCoffeeCrisis();
updateArcadeEdition();
updatePostFinishedCounter();
}
void GameLogo::updateCoffeeCrisis() {
switch (coffee_crisis_status_) {
case Status::MOVING: {
coffee_sprite_->update();
crisis_sprite_->update();
// Si los objetos han llegado a su destino, cambia el estado
if (coffee_sprite_->hasFinished() && crisis_sprite_->hasFinished()) {
coffee_crisis_status_ = Status::SHAKING;
// Reproduce el efecto sonoro
Audio::get()->playSound("title.wav");
Screen::get()->flash(Color(0xFF, 0xFF, 0xFF), FLASH_LENGHT, FLASH_DELAY);
Screen::get()->shake();
}
case Status::MOVING:
handleCoffeeCrisisMoving();
break;
}
case Status::SHAKING: {
// Agita "COFFEE CRISIS"
if (shake_.remaining > 0) {
if (shake_.counter > 0) {
shake_.counter--;
} else {
shake_.counter = shake_.delay;
const auto DESP = shake_.remaining % 2 == 0 ? shake_.desp * (-1) : shake_.desp;
coffee_sprite_->setPosX(shake_.origin + DESP);
crisis_sprite_->setPosX(shake_.origin + DESP + 15);
shake_.remaining--;
}
} else {
coffee_sprite_->setPosX(shake_.origin);
crisis_sprite_->setPosX(shake_.origin + 15);
coffee_crisis_status_ = Status::FINISHED;
arcade_edition_status_ = Status::MOVING;
}
dust_right_sprite_->update();
dust_left_sprite_->update();
case Status::SHAKING:
handleCoffeeCrisisShaking();
break;
}
case Status::FINISHED: {
dust_right_sprite_->update();
dust_left_sprite_->update();
case Status::FINISHED:
handleCoffeeCrisisFinished();
break;
}
default:
break;
}
}
void GameLogo::updateArcadeEdition() {
switch (arcade_edition_status_) {
case Status::MOVING: {
zoom_ -= 0.1F * ZOOM_FACTOR;
arcade_edition_sprite_->setZoom(zoom_);
if (zoom_ <= 1.0F) {
arcade_edition_status_ = Status::SHAKING;
zoom_ = 1.0F;
arcade_edition_sprite_->setZoom(zoom_);
shake_.init(1, 2, 8, arcade_edition_sprite_->getX());
Audio::get()->playSound("title.wav");
Screen::get()->flash(Color(0xFF, 0xFF, 0xFF), FLASH_LENGHT, FLASH_DELAY);
Screen::get()->shake();
}
case Status::MOVING:
handleArcadeEditionMoving();
break;
}
case Status::SHAKING: {
// Agita "ARCADE EDITION"
if (shake_.remaining > 0) {
if (shake_.counter > 0) {
shake_.counter--;
} else {
shake_.counter = shake_.delay;
const auto DESP = shake_.remaining % 2 == 0 ? shake_.desp * (-1) : shake_.desp;
arcade_edition_sprite_->setX(shake_.origin + DESP);
shake_.remaining--;
}
} else {
arcade_edition_sprite_->setX(shake_.origin);
arcade_edition_status_ = Status::FINISHED;
}
case Status::SHAKING:
handleArcadeEditionShaking();
break;
}
default:
break;
}
}
void GameLogo::handleCoffeeCrisisMoving() {
coffee_sprite_->update();
crisis_sprite_->update();
if (coffee_sprite_->hasFinished() && crisis_sprite_->hasFinished()) {
coffee_crisis_status_ = Status::SHAKING;
playTitleEffects();
}
}
void GameLogo::handleCoffeeCrisisShaking() {
if (shake_.remaining > 0) {
processShakeEffect(coffee_sprite_.get(), crisis_sprite_.get());
} else {
finishCoffeeCrisisShaking();
}
updateDustSprites();
}
void GameLogo::handleCoffeeCrisisFinished() {
updateDustSprites();
}
void GameLogo::handleArcadeEditionMoving() {
zoom_ -= 0.1F * ZOOM_FACTOR;
arcade_edition_sprite_->setZoom(zoom_);
if (zoom_ <= 1.0F) {
finishArcadeEditionMoving();
}
}
void GameLogo::handleArcadeEditionShaking() {
if (shake_.remaining > 0) {
processArcadeEditionShake();
} else {
arcade_edition_sprite_->setX(shake_.origin);
arcade_edition_status_ = Status::FINISHED;
}
}
void GameLogo::processShakeEffect(SmartSprite* primary_sprite, SmartSprite* secondary_sprite) {
if (shake_.counter > 0) {
shake_.counter--;
} else {
shake_.counter = shake_.delay;
const auto displacement = calculateShakeDisplacement();
primary_sprite->setPosX(shake_.origin + displacement);
if (secondary_sprite) {
secondary_sprite->setPosX(shake_.origin + displacement + 15);
}
shake_.remaining--;
}
}
void GameLogo::processArcadeEditionShake() {
if (shake_.counter > 0) {
shake_.counter--;
} else {
shake_.counter = shake_.delay;
const auto displacement = calculateShakeDisplacement();
arcade_edition_sprite_->setX(shake_.origin + displacement);
shake_.remaining--;
}
}
int GameLogo::calculateShakeDisplacement() const {
return shake_.remaining % 2 == 0 ? shake_.desp * (-1) : shake_.desp;
}
void GameLogo::finishCoffeeCrisisShaking() {
coffee_sprite_->setPosX(shake_.origin);
crisis_sprite_->setPosX(shake_.origin + 15);
coffee_crisis_status_ = Status::FINISHED;
arcade_edition_status_ = Status::MOVING;
}
void GameLogo::finishArcadeEditionMoving() {
arcade_edition_status_ = Status::SHAKING;
zoom_ = 1.0F;
arcade_edition_sprite_->setZoom(zoom_);
shake_.init(1, 2, 8, arcade_edition_sprite_->getX());
playTitleEffects();
}
void GameLogo::playTitleEffects() {
Audio::get()->playSound("title.wav");
Screen::get()->flash(Color(0xFF, 0xFF, 0xFF), FLASH_LENGHT, FLASH_DELAY);
Screen::get()->shake();
}
void GameLogo::updateDustSprites() {
dust_right_sprite_->update();
dust_left_sprite_->update();
}
void GameLogo::updatePostFinishedCounter() {
if (coffee_crisis_status_ == Status::FINISHED &&
arcade_edition_status_ == Status::FINISHED &&
post_finished_counter_ > 0) {