57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
#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; }
|
||
|
||
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
|