step B.1: fades de ModuleGame tick-based amb scenes::PaletteFade (fases FadingIn/FadingOut sense redibuixar, per no perdre el frame final)
This commit is contained in:
@@ -37,11 +37,11 @@ Director* Director::instance_ = nullptr;
|
||||
|
||||
namespace {
|
||||
|
||||
// Entry del fiber del joc. Alterna entre la capa `scenes::` (cinemàtiques
|
||||
// i menús, triats per `info::ctx.num_piramide` via el SceneRegistry) i
|
||||
// ModuleGame (gameplay) fins que el joc demana eixir. Quan el codi de
|
||||
// gameplay o una escena crida JD8_Flip(), el control torna automàticament
|
||||
// al Director via `GameFiber::yield()`.
|
||||
// Entry del fiber del joc. Dispatcha a una escena segons l'estat actual:
|
||||
// `gameState == 0` → ModuleGame (gameplay), `gameState == 1` → una
|
||||
// `scenes::Scene` del registry triada per `info::ctx.num_piramide`. Cada
|
||||
// escena és tick-based; el JD8_Flip() entre ticks cedeix al Director
|
||||
// via `GameFiber::yield()`.
|
||||
void gameFiberEntry() {
|
||||
info::ctx.num_habitacio = Options::game.habitacio_inicial;
|
||||
info::ctx.num_piramide = Options::game.piramide_inicial;
|
||||
@@ -60,31 +60,29 @@ void gameFiberEntry() {
|
||||
|
||||
int gameState = 1;
|
||||
while (gameState != -1 && !JG_Quitting()) {
|
||||
std::unique_ptr<scenes::Scene> scene;
|
||||
|
||||
if (gameState == 0) {
|
||||
// Gameplay pur (ModuleGame encara és cooperatiu-clàssic: conté
|
||||
// el seu while intern i crida JD8_Flip manualment). Fora
|
||||
// d'abast de la migració scenes:: — es tractarà en una fase
|
||||
// posterior quan el fiber es puga eliminar.
|
||||
auto* mg = new ModuleGame();
|
||||
gameState = mg->Go();
|
||||
delete mg;
|
||||
continue;
|
||||
// Gameplay. ModuleGame és una scenes::Scene des de Phase A de
|
||||
// la migració — mateix mini-loop tick+flip que la resta.
|
||||
scene = std::make_unique<ModuleGame>();
|
||||
} else {
|
||||
// gameState == 1: dispatch al registry per num_piramide. El
|
||||
// vell ModuleSequence::Go() feia aquest redirect al principi:
|
||||
// si el jugador arriba a la Secreta (6) sense prou diners,
|
||||
// salta als slides de fracàs (7) abans de buscar l'escena.
|
||||
if (info::ctx.num_piramide == 6 && info::ctx.diners < 200) {
|
||||
info::ctx.num_piramide = 7;
|
||||
}
|
||||
scene = scenes::SceneRegistry::instance().tryCreate(info::ctx.num_piramide);
|
||||
}
|
||||
|
||||
// gameState == 1: dispatch a la capa scenes::.
|
||||
// El vell `ModuleSequence::Go()` feia aquest redirect al principi:
|
||||
// si el jugador arriba a la Secreta (6) sense prou diners, salta
|
||||
// als slides de fracàs (7) abans de buscar l'escena al registry.
|
||||
if (info::ctx.num_piramide == 6 && info::ctx.diners < 200) {
|
||||
info::ctx.num_piramide = 7;
|
||||
}
|
||||
|
||||
auto scene = scenes::SceneRegistry::instance().tryCreate(info::ctx.num_piramide);
|
||||
if (!scene) {
|
||||
// State no registrat — indica un bug del dispatcher o del
|
||||
// registre d'escenes. Eixim ordenadament en lloc de cremar CPU.
|
||||
break;
|
||||
}
|
||||
|
||||
scene->onEnter();
|
||||
Uint32 last = SDL_GetTicks();
|
||||
while (!scene->done() && !JG_Quitting()) {
|
||||
|
||||
Reference in New Issue
Block a user