#pragma once #include "core/jail/jdraw8.hpp" #include "scenes/palette_fade.hpp" #include "scenes/scene.hpp" #include "scenes/surface_handle.hpp" namespace scenes { // 3 slides narratius amb scroll d'entrada + espera + transició amb // fade-out. Reemplaça `ModuleSequence::doSlides()`. // // Tria d'asset segons context: // - num_piramide == 7 i diners < 200: gfx/intro2.gif + música "music/final.ogg" // - num_piramide == 7 i diners >= 200: gfx/intro3.gif + música "music/final.ogg" // - altre cas (num_piramide == 1): gfx/intro.gif, sense música nova // // Flux: // Slide1Enter (1600 ms scroll dreta→centre, easing outCubic) // → Slide1Hold (4600 ms) // → FadeOut1 + clear + reset paleta // → Slide2Enter (1600 ms scroll esquerra→centre) // → Slide2Hold (4600 ms) // → FadeOut2 + clear + reset paleta // → Slide3Enter (1600 ms scroll dreta→centre) // → Slide3Hold (4600 ms) // → FadeFinal (JA_FadeOutMusic si num_piramide != 7 + fade paleta) // → Done // // Qualsevol tecla salta directament a FadeFinal (sense cortar la música // si hem entrat per num_piramide==7, per fidelitat al vell). // // NextState: // - num_piramide==7 al entrar → num_piramide=8 + return 1 (a Credits) // - altre cas → return 0 (entra al ModuleGame) class SlidesScene : public Scene { public: SlidesScene() = default; ~SlidesScene() override; void onEnter() override; void tick(int delta_ms) override; bool done() const override { return phase_ == Phase::Done; } int nextState() const override { return next_state_; } private: enum class Phase { Slide1Enter, Slide1Hold, FadeOut1, Slide2Enter, Slide2Hold, FadeOut2, Slide3Enter, Slide3Hold, FadeFinal, Done, }; // Pinta un slide amb desplaçament horitzontal. `slide_idx` = 0..2 // (correspon a la franja 65x65 a y = 0, 65, 130 dins de gfx_). // `pos_x` = desplaçament, amb clipping manual quan surt de pantalla. void drawSlide(int slide_idx, int pos_x); void restorePalette(); void beginFinalFade(); SurfaceHandle gfx_; JD8_Palette pal_aux_{nullptr}; // còpia "neta" que preservem JD8_Palette pal_active_{nullptr}; // propietat transferida a main_palette PaletteFade fade_; Phase phase_{Phase::Slide1Enter}; int phase_acc_ms_{0}; int num_piramide_at_start_{1}; int next_state_{0}; bool skip_triggered_{false}; }; } // namespace scenes