refactor: extreure helpers per reduir complexitat cognitiva (tidy net)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user