53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
#pragma once
|
||
|
||
#include "core/jail/jdraw8.hpp"
|
||
#include "scenes/frame_animator.hpp"
|
||
#include "scenes/palette_fade.hpp"
|
||
#include "scenes/scene.hpp"
|
||
#include "scenes/surface_handle.hpp"
|
||
|
||
namespace scenes {
|
||
|
||
// Crèdits finals del joc. Reemplaça `ModuleSequence::doCredits()`.
|
||
//
|
||
// Flux:
|
||
// 1. Carrega gfx/final.gif (sprites de crèdits) i gfx/finals.gif (fons).
|
||
// 2. Mostra els crèdits amb scroll vertical de 2 columnes durant
|
||
// ~62 segons (contador 0..3100 × 20 ms).
|
||
// 3. Si `info::ctx.diamants == 16`, pinta addicionalment un parallax
|
||
// de 4 capes amb cotxe animat (8 frames). Si no, 2 blits fixos.
|
||
// 4. Al acabar (per tecla o per contador), crea el fitxer `trick.ini`
|
||
// i activa `info::ctx.nou_personatge`.
|
||
// 5. Fade-out de paleta. Torna a la intro (num_piramide = 255).
|
||
//
|
||
// Registrada al SceneRegistry amb state_key = 8.
|
||
class CreditsScene : public Scene {
|
||
public:
|
||
CreditsScene() = default;
|
||
~CreditsScene() override;
|
||
|
||
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 { Rolling,
|
||
FadingOut,
|
||
Done };
|
||
|
||
void render();
|
||
void writeTrickIni();
|
||
|
||
SurfaceHandle vaddr2_; // gfx/final.gif (sprites i coches)
|
||
SurfaceHandle vaddr3_; // gfx/finals.gif (fons / parallax)
|
||
PaletteFade fade_;
|
||
FrameAnimator coche_{8, 60, true}; // 8 frames × 60 ms (~3 × 20 ms tick vell)
|
||
|
||
Phase phase_{Phase::Rolling};
|
||
int contador_{1};
|
||
int contador_acc_ms_{0};
|
||
};
|
||
|
||
} // namespace scenes
|