diff options
Diffstat (limited to 'kurator/src/Session.cpp')
-rw-r--r-- | kurator/src/Session.cpp | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/kurator/src/Session.cpp b/kurator/src/Session.cpp index 1d1d513..9d39d59 100644 --- a/kurator/src/Session.cpp +++ b/kurator/src/Session.cpp @@ -1,6 +1,7 @@ #include "Session.h" #include <memory> +#include <utility> #include <raylib.h> #include <rlImGui.h> @@ -13,27 +14,43 @@ namespace kurator void -Session::set(std::shared_ptr<Scene> _scene) +Session::set(std::shared_ptr<Scene> scene) { - previous_scene = scene; - scene = _scene; + pop(); + push(std::move(scene)); +} + + +void +Session::push(std::shared_ptr<Scene> scene) +{ + scenes.push_back(std::move(scene)); +} + + +void +Session::pop() +{ + if (!scenes.empty()) { + for_removal.push_back(std::move(scenes.back())); + scenes.pop_back(); + } } void Session::run() { - while (!window.should_close() && keep_going) { - if (!scene) - return; + while (!window.should_close() && !scenes.empty()) { + auto scene = scenes.back(); rlImGuiBegin(); scene->update(GetFrameTime()); BeginDrawing(); scene->draw(); rlImGuiEnd(); EndDrawing(); - if (previous_scene) - previous_scene.reset(); + if (!for_removal.empty()) + for_removal.clear(); } } @@ -41,7 +58,7 @@ Session::run() void Session::quit() { - keep_going = false; + scenes.clear(); } |