Files
aee/source/game/scenes/slides_scene.hpp
T

82 lines
2.8 KiB
C++

#pragma once
#include <cstdint>
#include "core/jail/jdraw8.hpp"
#include "game/scenes/palette_fade.hpp"
#include "game/scenes/scene.hpp"
#include "game/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: gfx/intro2.gif + música "music/final.ogg"
// - num_piramide == 7 i diners >= 200: gfx/intro3.gif + música "music/final.ogg"
// - altre cas (num_piramide == 1): gfx/intro.gif, sense música nova
//
// Flux:
// SLIDE1_ENTER (1600 ms scroll dreta→centre, easing outCubic)
// → SLIDE1_HOLD (4600 ms)
// → FADE_OUT1 + clear + reset paleta
// → SLIDE2_ENTER (1600 ms scroll esquerra→centre)
// → SLIDE2_HOLD (4600 ms)
// → FADE_OUT2 + clear + reset paleta
// → SLIDE3_ENTER (1600 ms scroll dreta→centre)
// → SLIDE3_HOLD (4600 ms)
// → FADE_FINAL (Ja::fadeOutMusic si num_piramide != 7 + fade paleta)
// → Done
//
// Qualsevol tecla salta directament a FADE_FINAL (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;
[[nodiscard]] auto done() const -> bool override { return phase_ == Phase::DONE; }
[[nodiscard]] auto nextState() const -> int override { return next_state_; }
private:
enum class Phase : std::uint8_t {
SLIDE1_ENTER,
SLIDE1_HOLD,
FADE_OUT1,
SLIDE2_ENTER,
SLIDE2_HOLD,
FADE_OUT2,
SLIDE3_ENTER,
SLIDE3_HOLD,
FADE_FINAL,
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::SLIDE1_ENTER};
int phase_acc_ms_{0};
int num_piramide_at_start_{1};
int next_state_{0};
bool skip_triggered_{false};
};
} // namespace Scenes