#pragma once #include #include #include namespace frostbite2D { class Scene; class UIScene; class SceneManager { public: static SceneManager& get(); SceneManager(const SceneManager&) = delete; SceneManager& operator=(const SceneManager&) = delete; void PushScene(Ptr scene); void PopScene(); void ReplaceScene(Ptr scene); void PushUIScene(Ptr scene); void PopUIScene(); void ReplaceUIScene(Ptr scene); bool RemoveUIScene(UIScene* scene); void ClearUIScenes(); void ClearAll(); void Update(float deltaTime); void UpdateUI(float deltaTime); void Render(); bool DispatchEvent(const Event& event); bool DispatchUIEvent(const Event& event); Scene* GetCurrentScene() const; UIScene* GetCurrentUIScene() const; bool HasActiveScene() const; bool HasActiveUIScene() const; private: SceneManager() = default; std::vector> sceneStack_; std::vector> uiSceneStack_; }; } // namespace frostbite2D