#pragma once #include #include "core/jail/jdraw8.hpp" #include "game/scenes/palette_fade.hpp" #include "game/scenes/scene.hpp" #include "game/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: // SLIDE1_ENTER (1600 ms scroll dreta→centre, easing outCubic) // → SLIDE1_HOLD (4600 ms) // → FADE_OUT1 + clear + reset paleta // → SLIDE2_ENTER (1600 ms scroll esquerra→centre) // → SLIDE2_HOLD (4600 ms) // → FADE_OUT2 + clear + reset paleta // → SLIDE3_ENTER (1600 ms scroll dreta→centre) // → SLIDE3_HOLD (4600 ms) // → FADE_FINAL (Ja::fadeOutMusic si num_piramide != 7 + fade paleta) // → Done // // Qualsevol tecla salta directament a FADE_FINAL (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; [[nodiscard]] auto done() const -> bool override { return phase_ == Phase::DONE; } [[nodiscard]] auto nextState() const -> int override { return next_state_; } private: enum class Phase : std::uint8_t { SLIDE1_ENTER, SLIDE1_HOLD, FADE_OUT1, SLIDE2_ENTER, SLIDE2_HOLD, FADE_OUT2, SLIDE3_ENTER, SLIDE3_HOLD, FADE_FINAL, 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::SLIDE1_ENTER}; int phase_acc_ms_{0}; int num_piramide_at_start_{1}; int next_state_{0}; bool skip_triggered_{false}; }; } // namespace Scenes