#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