80 lines
2.4 KiB
C++
80 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "core/jail/jdraw8.hpp"
|
|
#include "scenes/palette_fade.hpp"
|
|
#include "scenes/scene.hpp"
|
|
#include "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: intro2.gif + música "00000005.ogg"
|
|
// - num_piramide == 7 i diners >= 200: intro3.gif + música "00000005.ogg"
|
|
// - altre cas (num_piramide == 1): intro.gif, sense música nova
|
|
//
|
|
// Flux:
|
|
// Slide1Enter (1600 ms scroll dreta→centre, easing outCubic)
|
|
// → Slide1Hold (4600 ms)
|
|
// → FadeOut1 + clear + reset paleta
|
|
// → Slide2Enter (1600 ms scroll esquerra→centre)
|
|
// → Slide2Hold (4600 ms)
|
|
// → FadeOut2 + clear + reset paleta
|
|
// → Slide3Enter (1600 ms scroll dreta→centre)
|
|
// → Slide3Hold (4600 ms)
|
|
// → FadeFinal (JA_FadeOutMusic si num_piramide != 7 + fade paleta)
|
|
// → Done
|
|
//
|
|
// Qualsevol tecla salta directament a FadeFinal (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;
|
|
bool done() const override { return phase_ == Phase::Done; }
|
|
int nextState() const override { return next_state_; }
|
|
|
|
private:
|
|
enum class Phase {
|
|
Slide1Enter,
|
|
Slide1Hold,
|
|
FadeOut1,
|
|
Slide2Enter,
|
|
Slide2Hold,
|
|
FadeOut2,
|
|
Slide3Enter,
|
|
Slide3Hold,
|
|
FadeFinal,
|
|
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::Slide1Enter};
|
|
int phase_acc_ms_{0};
|
|
int num_piramide_at_start_{1};
|
|
int next_state_{0};
|
|
bool skip_triggered_{false};
|
|
};
|
|
|
|
} // namespace scenes
|