refactor: extreure helpers per reduir complexitat cognitiva (tidy net)
This commit is contained in:
@@ -132,17 +132,59 @@ namespace Scenes {
|
||||
}
|
||||
}
|
||||
|
||||
void IntroNewLogoScene::advanceRevealing(int delta_ms) {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
render();
|
||||
if (phase_acc_ms_ < REVEAL_FRAME_MS) {
|
||||
return;
|
||||
}
|
||||
phase_acc_ms_ = 0;
|
||||
reveal_cursor_visible_ = !reveal_cursor_visible_;
|
||||
if (!reveal_cursor_visible_) {
|
||||
return;
|
||||
}
|
||||
++reveal_letter_;
|
||||
if (reveal_letter_ >= 9) {
|
||||
phase_ = Phase::FULL_LOGO_FLASH;
|
||||
reveal_letter_ = 8;
|
||||
}
|
||||
}
|
||||
|
||||
void IntroNewLogoScene::advancePaletteStep(int delta_ms) {
|
||||
phase_acc_ms_ += delta_ms;
|
||||
while (phase_acc_ms_ >= PALETTE_CYCLE_STEP_MS && palette_step_ < PALETTE_CYCLE_STEPS) {
|
||||
phase_acc_ms_ -= PALETTE_CYCLE_STEP_MS;
|
||||
advancePaletteCycle();
|
||||
++palette_step_;
|
||||
}
|
||||
render();
|
||||
if (palette_step_ >= PALETTE_CYCLE_STEPS) {
|
||||
phase_ = Phase::FINAL_WAIT;
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void IntroNewLogoScene::advanceSpritesPhase(int delta_ms) {
|
||||
if (!sprites_scene_) {
|
||||
sprites_scene_ = std::make_unique<IntroSpritesScene>(std::move(gfx_));
|
||||
sprites_scene_->onEnter();
|
||||
}
|
||||
sprites_scene_->tick(delta_ms);
|
||||
if (sprites_scene_->done()) {
|
||||
Info::ctx.num_piramide = 0;
|
||||
phase_ = Phase::DONE;
|
||||
}
|
||||
}
|
||||
|
||||
void IntroNewLogoScene::tick(int delta_ms) {
|
||||
// Qualsevol tecla durant el revelat o el ciclo de paleta salta
|
||||
// TOTA la intro (inclou saltar la fase de sprites). Durant SPRITES
|
||||
// deixem que la sub-escena gestione el seu propi skip (que a més
|
||||
// respecta la fase "final" no skippable de la variant 0).
|
||||
// deixem que la sub-escena gestione el seu propi skip.
|
||||
if (phase_ != Phase::SPRITES && phase_ != Phase::DONE && Ji::anyKey()) {
|
||||
Info::ctx.num_piramide = 0;
|
||||
phase_ = Phase::DONE;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (phase_) {
|
||||
case Phase::INITIAL:
|
||||
phase_acc_ms_ += delta_ms;
|
||||
@@ -152,25 +194,9 @@ namespace Scenes {
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::REVEALING:
|
||||
phase_acc_ms_ += delta_ms;
|
||||
render();
|
||||
if (phase_acc_ms_ >= REVEAL_FRAME_MS) {
|
||||
phase_acc_ms_ = 0;
|
||||
reveal_cursor_visible_ = !reveal_cursor_visible_;
|
||||
// Quan acabem els dos frames d'una lletra (cursor on → off),
|
||||
// passem a la següent lletra.
|
||||
if (reveal_cursor_visible_) {
|
||||
++reveal_letter_;
|
||||
if (reveal_letter_ >= 9) {
|
||||
phase_ = Phase::FULL_LOGO_FLASH;
|
||||
reveal_letter_ = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
advanceRevealing(delta_ms);
|
||||
break;
|
||||
|
||||
case Phase::FULL_LOGO_FLASH:
|
||||
phase_acc_ms_ += delta_ms;
|
||||
render();
|
||||
@@ -179,24 +205,9 @@ namespace Scenes {
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::PALETTE_CYCLE:
|
||||
phase_acc_ms_ += delta_ms;
|
||||
// Avancem passos de paleta cada 20 ms. Si el delta és gran,
|
||||
// consumim múltiples passos en la mateixa crida.
|
||||
while (phase_acc_ms_ >= PALETTE_CYCLE_STEP_MS &&
|
||||
palette_step_ < PALETTE_CYCLE_STEPS) {
|
||||
phase_acc_ms_ -= PALETTE_CYCLE_STEP_MS;
|
||||
advancePaletteCycle();
|
||||
++palette_step_;
|
||||
}
|
||||
render();
|
||||
if (palette_step_ >= PALETTE_CYCLE_STEPS) {
|
||||
phase_ = Phase::FINAL_WAIT;
|
||||
phase_acc_ms_ = 0;
|
||||
}
|
||||
advancePaletteStep(delta_ms);
|
||||
break;
|
||||
|
||||
case Phase::FINAL_WAIT:
|
||||
phase_acc_ms_ += delta_ms;
|
||||
render();
|
||||
@@ -204,25 +215,9 @@ namespace Scenes {
|
||||
phase_ = Phase::SPRITES;
|
||||
}
|
||||
break;
|
||||
|
||||
case Phase::SPRITES:
|
||||
// Sub-escena construïda al primer tick. Transferim el gfx_
|
||||
// per move — la sub-escena se n'ocupa fins que es destruix.
|
||||
// Cada tick successiu delega l'animació dels sprites.
|
||||
if (!sprites_scene_) {
|
||||
sprites_scene_ = std::make_unique<IntroSpritesScene>(std::move(gfx_));
|
||||
sprites_scene_->onEnter();
|
||||
}
|
||||
sprites_scene_->tick(delta_ms);
|
||||
if (sprites_scene_->done()) {
|
||||
// El vell `Go()` post-switch feia `num_piramide = 0`
|
||||
// per passar al menú. Sense açò el while del fiber
|
||||
// tornaria a crear IntroNewLogoScene infinitament.
|
||||
Info::ctx.num_piramide = 0;
|
||||
phase_ = Phase::DONE;
|
||||
}
|
||||
advanceSpritesPhase(delta_ms);
|
||||
break;
|
||||
|
||||
case Phase::DONE:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user