38 lines
1.3 KiB
C++
38 lines
1.3 KiB
C++
#pragma once
|
|
|
|
// Interfície base per a una escena (cinemàtica, menú, banner, etc.) del
|
|
// joc. Una escena és una unitat autònoma amb un `tick(delta_ms)` no
|
|
// bloquejant. El Director la fa avançar cada frame fins que `done()` és
|
|
// cert, i llavors consulta `nextState()` per decidir la següent.
|
|
//
|
|
// Contracte:
|
|
// - `tick(delta_ms)` no pot bloquejar ni cridar JD8_Flip — el caller
|
|
// s'encarrega de fer el flip després del tick.
|
|
// - `done()` es consulta just després de cada tick.
|
|
// - Els assets són propietat de l'escena (normalment via SurfaceHandle)
|
|
// i s'alliberen al destructor.
|
|
// - `onEnter()` es crida una vegada just abans del primer tick. És el
|
|
// moment bo per a arrancar música, disparar un fade-in, etc.
|
|
|
|
namespace scenes {
|
|
|
|
class Scene {
|
|
public:
|
|
virtual ~Scene() = default;
|
|
|
|
virtual void onEnter() {}
|
|
|
|
virtual void tick(int delta_ms) = 0;
|
|
|
|
virtual bool done() const = 0;
|
|
|
|
// Valor retornat al caller quan l'escena acaba — equivalent al int
|
|
// que retornaven les velles funcions `Go()` de ModuleSequence:
|
|
// 1 = continuar amb la següent escena segons info::ctx
|
|
// 0 = entrar al gameplay (ModuleGame)
|
|
// -1 = eixir del joc
|
|
virtual int nextState() const { return 1; }
|
|
};
|
|
|
|
} // namespace scenes
|