summaryrefslogtreecommitdiff
path: root/kurator/src/Session.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kurator/src/Session.cpp')
-rw-r--r--kurator/src/Session.cpp35
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();
}