From 93c097eb204848da368bf99d41271835ef04c4f7 Mon Sep 17 00:00:00 2001 From: Leeor Dicker Date: Thu, 29 Jun 2023 13:56:23 -0400 Subject: [PATCH] Add state transition function calls --- OP2-Landlord/main.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/OP2-Landlord/main.cpp b/OP2-Landlord/main.cpp index c4e4dfa..d7866f2 100644 --- a/OP2-Landlord/main.cpp +++ b/OP2-Landlord/main.cpp @@ -32,6 +32,9 @@ namespace using StateGuiFunction = std::function; std::map StateFunctionTable; + + using StateTransitionFunction = std::function; + std::map StateTransitionFunctionTable; }; @@ -46,8 +49,21 @@ void mainLoop(Graphics& graphics, Gui& gui) graphics.clear(); gui.newFrame(); + const auto previousState = ApplicationState; ApplicationState = StateFunctionTable.at(ApplicationState)(); + if (previousState != ApplicationState) + { + try + { + StateTransitionFunctionTable.at(ApplicationState)(gui); + } + catch (std::out_of_range) + { + std::cout << "[Warning] No transition handler for ApplicationState '" << static_cast(ApplicationState) << "'" << std::endl; + } + } + gui.endFrame(); graphics.present(); } @@ -60,10 +76,17 @@ void checkConfig(EditorConfig& config) } +void loadOrCreateTransition(Gui& gui) +{ +} + + void buildStateGuiFunctionTable(Gui& gui) { StateFunctionTable.emplace(Gui::AppState::InitialSetup, [&gui]() { return gui.initialSetup(); }); StateFunctionTable.emplace(Gui::AppState::CreateOrLoadMap, [&gui]() { return gui.createOrLoadMap(); }); + + StateTransitionFunctionTable.emplace(Gui::AppState::CreateOrLoadMap, loadOrCreateTransition); } @@ -81,6 +104,11 @@ int main(int argc, char* argv[]) buildStateGuiFunctionTable(gui); checkConfig(config); + + if (ApplicationState != Gui::AppState::InitialSetup) + { + loadOrCreateTransition(gui); + } mainLoop(graphics, gui);