diff options
author | Aki <please@ignore.pl> | 2022-12-26 17:32:59 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-12-26 17:32:59 +0100 |
commit | 03009f7d9cd1bc1e996e52603a5cff4374b7910f (patch) | |
tree | 67ca2f1c90487eccbff2dd3566ecd696a6329faf | |
parent | 1d559735ba59f48ca060226befadc2aee92b1fca (diff) | |
download | kurator-03009f7d9cd1bc1e996e52603a5cff4374b7910f.zip kurator-03009f7d9cd1bc1e996e52603a5cff4374b7910f.tar.gz kurator-03009f7d9cd1bc1e996e52603a5cff4374b7910f.tar.bz2 |
Reworked scene management around the stack in Session
-rw-r--r-- | kurator/src/Log.cpp | 3 | ||||
-rw-r--r-- | kurator/src/ScenarioEditor.cpp | 26 | ||||
-rw-r--r-- | kurator/src/ScenarioEditor.h | 5 | ||||
-rw-r--r-- | kurator/src/Session.cpp | 2 | ||||
-rw-r--r-- | kurator/src/Title.cpp | 4 |
5 files changed, 26 insertions, 14 deletions
diff --git a/kurator/src/Log.cpp b/kurator/src/Log.cpp index 162e309..0689176 100644 --- a/kurator/src/Log.cpp +++ b/kurator/src/Log.cpp @@ -9,7 +9,6 @@ #include <kurator/stats/events.h> #include "EventLog.h" -#include "ScenarioEditor.h" #include "Session.h" @@ -36,7 +35,7 @@ void Log::update(const float) { if (IsKeyPressed(KEY_SPACE)) - session->set(std::make_shared<ScenarioEditor>(session)); + session->pop(); } diff --git a/kurator/src/ScenarioEditor.cpp b/kurator/src/ScenarioEditor.cpp index 0b00b02..7025b49 100644 --- a/kurator/src/ScenarioEditor.cpp +++ b/kurator/src/ScenarioEditor.cpp @@ -25,7 +25,7 @@ ScenarioEditor::ScenarioEditor(std::shared_ptr<Session> _session) : warbringers {2}, eclipses {3}, distance {12000}, - battle {std::make_shared<Battle>(session, scenario())} + battle {generate()} { } @@ -51,13 +51,16 @@ ScenarioEditor::update(float) update |= ImGui::SliderInt("Eclipses", &eclipses, 0, 20); update |= ImGui::SliderFloat("Distance", &distance, 10000, 20000); if (update) - battle = std::make_shared<Battle>(session, scenario()); + battle = generate(); if (ImGui::Button("Start")) - session->set(std::move(battle)); + start_battle(); + ImGui::SameLine(); + if (ImGui::Button("Back")) + session->pop(); } ImGui::End(); if (IsKeyPressed(KEY_SPACE)) - session->set(std::move(battle)); + start_battle(); } @@ -83,10 +86,19 @@ ScenarioEditor::draw() const } -campaign::Scenario -ScenarioEditor::scenario() const +void +ScenarioEditor::start_battle() +{ + session->push(std::move(battle)); + battle = generate(); +} + + +std::shared_ptr<Scene> +ScenarioEditor::generate() const { - return campaign::scenarios::example(teams, anvils, warbringers, eclipses, distance); + auto scenario = campaign::scenarios::example(teams, anvils, warbringers, eclipses, distance); + return std::make_shared<Battle>(session, std::move(scenario)); } diff --git a/kurator/src/ScenarioEditor.h b/kurator/src/ScenarioEditor.h index 70ce3a2..ec83965 100644 --- a/kurator/src/ScenarioEditor.h +++ b/kurator/src/ScenarioEditor.h @@ -4,8 +4,6 @@ #include <raylib.h> -#include <kurator/campaign/Scenario.h> - #include "Scene.h" #include "Session.h" @@ -21,8 +19,9 @@ public: ~ScenarioEditor(); void update(float dt) override; void draw() const override; + void start_battle(); private: - campaign::Scenario scenario() const; + std::shared_ptr<Scene> generate() const; std::shared_ptr<Session> session; RenderTexture2D buffer; int teams; diff --git a/kurator/src/Session.cpp b/kurator/src/Session.cpp index 9d39d59..59adcae 100644 --- a/kurator/src/Session.cpp +++ b/kurator/src/Session.cpp @@ -45,6 +45,8 @@ Session::run() auto scene = scenes.back(); rlImGuiBegin(); scene->update(GetFrameTime()); + if (!scenes.empty()) + scene = scenes.back(); BeginDrawing(); scene->draw(); rlImGuiEnd(); diff --git a/kurator/src/Title.cpp b/kurator/src/Title.cpp index ffd1b83..30fb209 100644 --- a/kurator/src/Title.cpp +++ b/kurator/src/Title.cpp @@ -27,9 +27,9 @@ Title::update(const float) ImGui::SetNextWindowPos({GetScreenWidth()/2.0f, GetScreenHeight()/2.0f}, ImGuiCond_Once, {0.5f, 0.4f}); if (ImGui::Begin("Main Menu", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse)) { if (ImGui::Button("Quick Battle", {-1.0f, 0.0f})) - session->set(SceneBuilder(session).battle()); + session->push(SceneBuilder(session).battle()); if (ImGui::Button("Scenario Editor", {-1.0f, 0.0f})) - session->set(SceneBuilder(session).scenario_editor()); + session->push(SceneBuilder(session).scenario_editor()); if (ImGui::Button("Exit", {-1.0f, 0.0f})) session->quit(); } |