65 virtual void Initialize();
73 virtual void Update(
float deltaTime);
86 virtual void Shutdown();
98 void LoadScene(std::string newSceneName);
104 std::shared_ptr<Camera> GetActiveCamera3D();
110 std::shared_ptr<Camera2D> GetActiveCamera2D();
124 template <
typename T,
typename V>
146 template <
typename T>
168 template <
typename T>
180 void DestroyDrawable3D(
Drawable3D* drawable3D);
189 void DestroyDrawable2D(
Drawable2D* drawable2D);
204 void DestroyActor(
Actor* actor);
216 void DestroyActor(
Actor2D * actor2D);
222 void SetBackgroundColor(glm::vec3 color);
238 void FlushDestroyed();
243 std::shared_ptr<Camera> mActiveCamera3D;
244 std::shared_ptr<Camera2D> mActiveCamera2D;
246 std::vector<Drawable3D*> mDrawables3D;
247 std::vector<Drawable2D*> mDrawables2D;
249 std::vector<Drawable3D*> mPendingDestroy3D;
250 std::vector<Drawable2D*> mPendingDestroy2D;
252 std::vector<Actor*> mActors;
253 std::vector<Actor*> mPendingDestroyActors;
255 std::vector<Actor2D*> mActors2D;
256 std::vector<Actor2D*> mPendingDestroyActors2D;
264 static_assert(std::is_base_of_v<Actor, T>,
265 "SpawnActor<T>: T must derive from Actor");
267 mActors.push_back(
new T(*
this));
268 T* ptr =
static_cast<T*
>(mActors.back());
277 static_assert(std::is_base_of_v<Actor2D, T>,
278 "SpawnActor<T>: T must derive from Actor2D");
280 mActors2D.push_back(
new T(*
this));
281 T* ptr =
static_cast<T*
>(mActors2D.back());
Base class representing a 2D entity within a Scene.
Base class representing a 3D entity within a Scene.
2D drawable component for rendering objects in 2D space.
3D drawable component for rendering objects in 3D space.
Manages scenes, resource caches, and scene transitions within the rendering engine.
Base class representing a renderable scene.
T * SpawnActor()
Spawns and registers a 3D actor of type T.
T * SpawnActor2D()
Spawns and registers a 2D actor of type T.
T * Spawn(V arg)
Spawns and registers a drawable of type T.
~Scene()=default
Virtual destructor for safe polymorphic destruction.
Displays real-time frame statistics as a 2D overlay.