25 lines
771 B
C++
25 lines
771 B
C++
#pragma once
|
|
|
|
#include <any>
|
|
#include <utility>
|
|
|
|
// 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_;
|
|
};
|