#pragma once #include #include // Base de totes les escenes. La transició entre escenes va per // `exit_request_`: l'escena hi posa un `ExitRequest` (definit a // `game/scenes/scene_flow.hpp`) amagat dins d'un `std::any` perquè // `core/scene/scene.hpp` no ha de saber dels tipus del joc. `Director` // fa el `std::any_cast` al canvi de frame i construeix la nova escena. class Scene { public: virtual ~Scene() = default; virtual void update(int delta_ms) = 0; virtual void render() = 0; [[nodiscard]] auto wantsQuit() const -> bool { return wants_quit_; } [[nodiscard]] auto takeExitRequest() -> std::any { return std::exchange(exit_request_, {}); } protected: bool wants_quit_{false}; std::any exit_request_; };