step 3: menu_scene substituix doMenu() + fix JI_Update al fiber loop

This commit is contained in:
2026-04-15 23:19:58 +02:00
parent 2cb38ffb49
commit 8720e775a0
6 changed files with 177 additions and 65 deletions

View File

@@ -0,0 +1,57 @@
#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 menu.gif (fondo) i 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