step 5: slides_scene amb wipe suau per easing (substituix doSlides)
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/jail/jinput.hpp"
|
||||
#include "game/info.hpp"
|
||||
#include "game/modulesequence.hpp"
|
||||
#include "scenes/scene_utils.hpp"
|
||||
|
||||
@@ -120,11 +121,14 @@ void IntroNewLogoScene::advancePaletteCycle() {
|
||||
}
|
||||
|
||||
void IntroNewLogoScene::tick(int delta_ms) {
|
||||
// Qualsevol tecla salta tota la intro del logo i va directament
|
||||
// a la delegació final — el mini-while del fiber no ha pintat
|
||||
// res encara, però doIntroSprites fa la seua pròpia intro.
|
||||
if (JI_AnyKey()) {
|
||||
phase_ = Phase::Delegate;
|
||||
// Qualsevol tecla durant el revelat o el ciclo de paleta salta
|
||||
// TOTA la intro (inclou saltar doIntroSprites). Aquest era el
|
||||
// comportament del vell `doIntroNewLogo`: a cada `waitTick()`
|
||||
// retornava abans de cridar `doIntroSprites`.
|
||||
if (phase_ != Phase::Delegate && phase_ != Phase::Done && JI_AnyKey()) {
|
||||
info::ctx.num_piramide = 0;
|
||||
phase_ = Phase::Done;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (phase_) {
|
||||
@@ -192,13 +196,18 @@ void IntroNewLogoScene::tick(int delta_ms) {
|
||||
case Phase::Delegate: {
|
||||
// Delegació temporal al codi legacy: crea un ModuleSequence
|
||||
// instància i li crida `doIntroSprites(gfx)`. La funció
|
||||
// legacy fa els seus propis `JD8_Flip()` (que cedeixen al
|
||||
// Director via GameFiber::yield) i torna quan la cinemàtica
|
||||
// de sprites ha acabat. Step 9 d'aquesta migració la
|
||||
// reescriurà com a scenes::IntroSpritesScene i aquesta
|
||||
// delegació desapareixerà.
|
||||
// legacy *sempre* allibera `gfx` ella mateixa (al final o en
|
||||
// els paths de skip amb JI_AnyKey), així que necessitem
|
||||
// transferir-li ownership via `release()` per evitar un
|
||||
// double free al destructor de SurfaceHandle. Step 9
|
||||
// d'aquesta migració la reescriurà com a IntroSpritesScene
|
||||
// i la delegació desapareixerà.
|
||||
ModuleSequence legacy;
|
||||
legacy.doIntroSprites(gfx_.get());
|
||||
legacy.doIntroSprites(gfx_.release());
|
||||
// El vell `Go()` post-switch feia `num_piramide = 0` per a
|
||||
// passar al menú. Ho reproduïm ací — si no, el while extern
|
||||
// del fiber tornaria a crear IntroNewLogoScene infinitament.
|
||||
info::ctx.num_piramide = 0;
|
||||
phase_ = Phase::Done;
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user