diff --git a/libs/app/include/psemek/app/app.hpp b/libs/app/include/psemek/app/app.hpp index c975e3bc..fd520e76 100644 --- a/libs/app/include/psemek/app/app.hpp +++ b/libs/app/include/psemek/app/app.hpp @@ -37,8 +37,8 @@ namespace psemek::app void poll_events(); void run(); - void push_scene(std::unique_ptr s) override; - std::unique_ptr pop_scene() override; + void push_scene(std::shared_ptr s) override; + std::shared_ptr pop_scene() override; void show_cursor(bool show); bool vsync() const; diff --git a/libs/app/include/psemek/app/scene_manager.hpp b/libs/app/include/psemek/app/scene_manager.hpp index eb1ac795..24b1856f 100644 --- a/libs/app/include/psemek/app/scene_manager.hpp +++ b/libs/app/include/psemek/app/scene_manager.hpp @@ -9,8 +9,8 @@ namespace psemek::app struct scene_manager { - virtual void push_scene(std::unique_ptr) = 0; - virtual std::unique_ptr pop_scene() = 0; + virtual void push_scene(std::shared_ptr) = 0; + virtual std::shared_ptr pop_scene() = 0; virtual ~scene_manager() {} }; diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index d69a1969..2c5f6201 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -20,7 +20,7 @@ namespace psemek::app SDL_Window * window = nullptr; SDL_GLContext gl_context = nullptr; - std::vector> scene_stack; + std::vector> scene_stack; bool running = false; @@ -39,11 +39,11 @@ namespace psemek::app if (window) SDL_DestroyWindow(window); } - scene * get_scene() + std::shared_ptr get_scene() { if (!scene_stack.empty()) - return scene_stack.back().get(); - return parent; + return scene_stack.back(); + return std::shared_ptr(parent, [](scene *){}); } }; @@ -216,7 +216,7 @@ namespace psemek::app { SDL_ShowWindow(impl().window); impl().running = true; - if (impl().get_scene() == this) + if (impl().get_scene().get() == this) on_scene_enter(this); while (running()) { @@ -240,7 +240,7 @@ namespace psemek::app impl().get_scene()->on_scene_exit(); } - void app::push_scene(std::unique_ptr s) + void app::push_scene(std::shared_ptr s) { impl().get_scene()->on_scene_exit(); @@ -250,7 +250,7 @@ namespace psemek::app impl().get_scene()->on_scene_enter(this); } - std::unique_ptr app::pop_scene() + std::shared_ptr app::pop_scene() { if (impl().scene_stack.empty()) return nullptr;