#pragma once #include "scenes/frame_animator.hpp" #include "scenes/palette_fade.hpp" #include "scenes/scene.hpp" #include "scenes/surface_handle.hpp" namespace scenes { // Menú del títol. Reemplaça `ModuleSequence::doMenu()`. // // Flux: // 1. Carrega gfx/menu.gif (fondo) i gfx/menu2.gif (sprites) + paleta. // 2. Pintat inicial estàtic (fondo, logo, camell frame 0, base "jdes"), // fade-in de paleta. // 3. Loop d'animació: escroll parallax de horitzó (cada 320 ms) i // palmeres (cada 80 ms), cicle del camell (4 frames × 160 ms), // i el text "polsa tecla" parpallejant cada 2 s (visible 1.4 s, // amagat 0.6 s, igual que el `contador % 100 > 30` original). // 4. Quan l'usuari polsa qualsevol tecla — o 'P' per a activar Pepe — // llegim `info::ctx.pepe_activat`, disparem fade-out i marquem // num_piramide=1 (vas a doSlides). // // Registrat al SceneRegistry amb state_key = 0. class MenuScene : public Scene { public: void onEnter() override; void tick(int delta_ms) override; bool done() const override { return phase_ == Phase::Done; } int nextState() const override { return 1; } private: enum class Phase { FadingIn, Showing, FadingOut, Done }; void render(); SurfaceHandle fondo_; SurfaceHandle gfx_; PaletteFade fade_; FrameAnimator camello_{4, 160, true}; Phase phase_{Phase::FadingIn}; // Scrollers horizontals. Mouen 1 pixel per pas. int palmeres_{0}; int horitzo_{0}; int palmeres_acc_ms_{0}; int horitzo_acc_ms_{0}; // Acumulador per al parpalleig del text "polsa tecla". int blink_ms_{0}; }; } // namespace scenes