refactor: extreure helpers per reduir complexitat cognitiva (tidy net)

This commit is contained in:
2026-05-16 16:13:57 +02:00
parent b984e6041e
commit e1bc1b597f
31 changed files with 1145 additions and 1332 deletions
+82 -75
View File
@@ -65,12 +65,12 @@ namespace Scenes {
next_state_ = 0;
}
void SlidesScene::drawSlide(int slide_idx, int POS_X) {
void SlidesScene::drawSlide(int slide_idx, int pos_x) {
const int SRC_Y = slide_idx * SLIDE_H;
// Clipping manual: translada un rect de 320×65 des de (POS_X, SLIDE_Y)
// a l'àrea visible (0..319, SLIDE_Y..SLIDE_Y+64).
int dst_x = POS_X;
int dst_x = pos_x;
int src_x = 0;
int w = 320;
@@ -99,99 +99,106 @@ namespace Scenes {
phase_ = Phase::FADE_FINAL;
}
void SlidesScene::tick(int delta_ms) {
// Skip: qualsevol tecla salta directament al fade final. Per fidelitat
// al vell doSlides, el skip NO atura la música explícitament — només
// el final natural crida Ja::fadeOutMusic (beginFinalFade() distingeix).
if (!skip_triggered_ && Ji::anyKey()) {
skip_triggered_ = true;
if (num_piramide_at_start_ != 7) {
Audio::get()->fadeOutMusic(250);
}
fade_.startFadeOut();
phase_ = Phase::FADE_FINAL;
void SlidesScene::triggerSkip() {
skip_triggered_ = true;
if (num_piramide_at_start_ != 7) {
Audio::get()->fadeOutMusic(250);
}
fade_.startFadeOut();
phase_ = Phase::FADE_FINAL;
}
void SlidesScene::tickSlideEnter(int delta_ms) {
phase_acc_ms_ += delta_ms;
int slide_idx = 2;
if (phase_ == Phase::SLIDE1_ENTER) {
slide_idx = 0;
} else if (phase_ == Phase::SLIDE2_ENTER) {
slide_idx = 1;
}
const float T = std::min(1.0F, static_cast<float>(phase_acc_ms_) / static_cast<float>(SCROLL_MS));
const float EASED = Easing::outCubic(T);
drawSlide(slide_idx, Easing::lerpInt(SLIDE_START_X[slide_idx], 0, EASED));
if (phase_acc_ms_ < SCROLL_MS) {
return;
}
drawSlide(slide_idx, 0);
switch (phase_) {
case Phase::SLIDE1_ENTER:
phase_ = Phase::SLIDE1_HOLD;
break;
case Phase::SLIDE2_ENTER:
phase_ = Phase::SLIDE2_HOLD;
break;
default:
phase_ = Phase::SLIDE3_HOLD;
break;
}
phase_acc_ms_ = 0;
}
void SlidesScene::tickHoldIntermediate(int delta_ms) {
phase_acc_ms_ += delta_ms;
if (phase_acc_ms_ < HOLD_MS) {
return;
}
fade_.startFadeOut();
phase_ = (phase_ == Phase::SLIDE1_HOLD) ? Phase::FADE_OUT1 : Phase::FADE_OUT2;
phase_acc_ms_ = 0;
}
void SlidesScene::tickFadeOutIntermediate(int delta_ms) {
fade_.tick(delta_ms);
if (!fade_.done()) {
return;
}
restorePalette();
Jd8::clearScreen(BG_COLOR_INDEX);
phase_ = (phase_ == Phase::FADE_OUT1) ? Phase::SLIDE2_ENTER : Phase::SLIDE3_ENTER;
phase_acc_ms_ = 0;
}
void SlidesScene::tickFinalFade(int delta_ms) {
fade_.tick(delta_ms);
if (!fade_.done()) {
return;
}
if (num_piramide_at_start_ == 7) {
Info::ctx.num_piramide = 8;
next_state_ = 1;
} else {
next_state_ = 0;
}
phase_ = Phase::DONE;
}
void SlidesScene::tick(int delta_ms) {
if (!skip_triggered_ && Ji::anyKey()) {
triggerSkip();
}
switch (phase_) {
case Phase::SLIDE1_ENTER:
case Phase::SLIDE2_ENTER:
case Phase::SLIDE3_ENTER: {
phase_acc_ms_ += delta_ms;
int slide_idx = 2;
if (phase_ == Phase::SLIDE1_ENTER) {
slide_idx = 0;
} else if (phase_ == Phase::SLIDE2_ENTER) {
slide_idx = 1;
}
const float T = std::min(1.0F, static_cast<float>(phase_acc_ms_) / static_cast<float>(SCROLL_MS));
const float EASED = Easing::outCubic(T);
const int POS_X = Easing::lerpInt(SLIDE_START_X[slide_idx], 0, EASED);
drawSlide(slide_idx, POS_X);
if (phase_acc_ms_ >= SCROLL_MS) {
// Garanteix posició final exacta (POS_X=0).
drawSlide(slide_idx, 0);
if (phase_ == Phase::SLIDE1_ENTER) {
phase_ = Phase::SLIDE1_HOLD;
} else if (phase_ == Phase::SLIDE2_ENTER) {
phase_ = Phase::SLIDE2_HOLD;
} else {
phase_ = Phase::SLIDE3_HOLD;
}
phase_acc_ms_ = 0;
}
case Phase::SLIDE3_ENTER:
tickSlideEnter(delta_ms);
break;
}
case Phase::SLIDE1_HOLD:
case Phase::SLIDE2_HOLD:
phase_acc_ms_ += delta_ms;
if (phase_acc_ms_ >= HOLD_MS) {
fade_.startFadeOut();
if (phase_ == Phase::SLIDE1_HOLD) {
phase_ = Phase::FADE_OUT1;
} else {
phase_ = Phase::FADE_OUT2;
}
phase_acc_ms_ = 0;
}
tickHoldIntermediate(delta_ms);
break;
case Phase::SLIDE3_HOLD:
phase_acc_ms_ += delta_ms;
if (phase_acc_ms_ >= HOLD_MS) {
beginFinalFade();
}
break;
case Phase::FADE_OUT1:
case Phase::FADE_OUT2:
fade_.tick(delta_ms);
if (fade_.done()) {
restorePalette();
Jd8::clearScreen(BG_COLOR_INDEX);
if (phase_ == Phase::FADE_OUT1) {
phase_ = Phase::SLIDE2_ENTER;
} else {
phase_ = Phase::SLIDE3_ENTER;
}
phase_acc_ms_ = 0;
}
tickFadeOutIntermediate(delta_ms);
break;
case Phase::FADE_FINAL:
fade_.tick(delta_ms);
if (fade_.done()) {
if (num_piramide_at_start_ == 7) {
Info::ctx.num_piramide = 8;
next_state_ = 1;
} else {
next_state_ = 0;
}
phase_ = Phase::DONE;
}
tickFinalFade(delta_ms);
break;
case Phase::DONE:
break;
}