diff --git a/src/assets/Assets.cpp b/src/assets/Assets.cpp index a2af1fb5..4c6b7808 100644 --- a/src/assets/Assets.cpp +++ b/src/assets/Assets.cpp @@ -83,7 +83,7 @@ UiDocument* Assets::getLayout(std::string name) const { } void Assets::store(UiDocument* layout, std::string name) { - layouts.emplace(name, layout); + layouts[name] = std::shared_ptr(layout); } void Assets::extend(const Assets& assets) { diff --git a/src/frontend/menu/menu_pause.cpp b/src/frontend/menu/menu_pause.cpp index c10533be..671d004b 100644 --- a/src/frontend/menu/menu_pause.cpp +++ b/src/frontend/menu/menu_pause.cpp @@ -181,11 +181,13 @@ void menus::create_pause_panel(Engine* engine, LevelController* controller) { panel->add(guiutil::gotoButton(L"Settings", "settings", menu)); panel->add(create_button(L"Save and Quit to Menu", glm::vec4(10.f), glm::vec4(1), [=](GUI*){ - // save world - controller->saveWorld(); - // destroy LevelScreen and run quit callbacks - engine->setScreen(nullptr); - // create and go to menu screen - engine->setScreen(std::make_shared(engine)); + engine->postRunnable([=]() { + // save world + controller->saveWorld(); + // destroy LevelScreen and run quit callbacks + engine->setScreen(nullptr); + // create and go to menu screen + engine->setScreen(std::make_shared(engine)); + }); })); } diff --git a/src/frontend/screens.cpp b/src/frontend/screens.cpp index 9f9d0e63..38de35f7 100644 --- a/src/frontend/screens.cpp +++ b/src/frontend/screens.cpp @@ -49,8 +49,8 @@ Screen::~Screen() { MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) { auto menu = engine->getGUI()->getMenu(); - menus::refresh_menus(engine); menu->reset(); + menus::refresh_menus(engine); menu->setPage("main"); uicamera.reset(new Camera(glm::vec3(), Window::height)); diff --git a/src/graphics/ui/elements/containers.cpp b/src/graphics/ui/elements/containers.cpp index 9fd753fa..0c31cb84 100644 --- a/src/graphics/ui/elements/containers.cpp +++ b/src/graphics/ui/elements/containers.cpp @@ -269,13 +269,14 @@ void Menu::addSupplier(std::string name, supplier> pageS void Menu::setPage(std::string name, bool history) { auto found = pages.find(name); - Page page; + Page page {name, nullptr}; if (found == pages.end()) { auto supplier = pageSuppliers.find(name); if (supplier == pageSuppliers.end()) { throw std::runtime_error("no page found"); } else { page.panel = supplier->second(); + // pages[name] = page; // supplied pages caching is not implemented } } else { @@ -319,4 +320,3 @@ void Menu::reset() { current = Page{"", nullptr}; } } -