game_logo: readability-function-cognitive-complexity
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user