#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; [[nodiscard]] virtual auto done() const -> bool = 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 [[nodiscard]] virtual auto nextState() const -> int { return 1; } }; } // namespace Scenes