72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
#include "scenes/banner_scene.hpp"
|
|
|
|
#include <cstdlib>
|
|
|
|
#include "core/jail/jail_audio.hpp"
|
|
#include "core/jail/jdraw8.hpp"
|
|
#include "core/jail/jinput.hpp"
|
|
#include "game/info.hpp"
|
|
#include "scenes/scene_utils.hpp"
|
|
|
|
namespace scenes {
|
|
|
|
void BannerScene::onEnter() {
|
|
playMusic("00000004.ogg");
|
|
|
|
gfx_ = SurfaceHandle("ffase.gif");
|
|
|
|
JD8_ClearScreen(0);
|
|
// Títols superior i inferior del banner (compartits per tots els nivells)
|
|
JD8_Blit(81, 24, gfx_, 81, 155, 168, 21);
|
|
JD8_Blit(39, 150, gfx_, 39, 175, 248, 20);
|
|
|
|
// Número de piràmide: les 4 variants del vell `doBanner` es reduïxen
|
|
// a coordenades (sx,sy) calculades a partir de l'índex 0..3.
|
|
const int idx = info::ctx.num_piramide - 2; // 2..5 → 0..3
|
|
if (idx >= 0 && idx <= 3) {
|
|
const int sx = (idx % 2) * 160;
|
|
const int sy = (idx / 2) * 75;
|
|
JD8_Blit(82, 60, gfx_, sx, sy, 160, 75);
|
|
}
|
|
|
|
// PaletteFade copia internament amb memcpy; alliberem la paleta temporal.
|
|
JD8_Palette pal = JD8_LoadPalette("ffase.gif");
|
|
fade_.startFadeTo(pal);
|
|
std::free(pal);
|
|
|
|
phase_ = Phase::FadingIn;
|
|
remaining_ms_ = 5000;
|
|
}
|
|
|
|
void BannerScene::tick(int delta_ms) {
|
|
switch (phase_) {
|
|
case Phase::FadingIn:
|
|
fade_.tick(delta_ms);
|
|
if (fade_.done()) phase_ = Phase::Showing;
|
|
break;
|
|
|
|
case Phase::Showing:
|
|
if (JI_AnyKey()) {
|
|
remaining_ms_ = 0;
|
|
} else {
|
|
remaining_ms_ -= delta_ms;
|
|
}
|
|
if (remaining_ms_ <= 0) {
|
|
JA_FadeOutMusic(250);
|
|
fade_.startFadeOut();
|
|
phase_ = Phase::FadingOut;
|
|
}
|
|
break;
|
|
|
|
case Phase::FadingOut:
|
|
fade_.tick(delta_ms);
|
|
if (fade_.done()) phase_ = Phase::Done;
|
|
break;
|
|
|
|
case Phase::Done:
|
|
break;
|
|
}
|
|
}
|
|
|
|
} // namespace scenes
|