From a3d35cd10f1e3d29ea8540aa250263c40e6ab748 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 2 Jan 2025 21:59:18 +0300 Subject: [PATCH] add gui.alert & critical fixes --- src/frontend/menu.cpp | 8 ++--- src/graphics/ui/gui_util.cpp | 39 ++++++++++++++++--------- src/graphics/ui/gui_util.hpp | 2 +- src/logic/EngineController.cpp | 2 +- src/logic/scripting/lua/libs/libgui.cpp | 12 ++++++++ src/logic/scripting/lua/lua_util.cpp | 8 ++--- src/util/HandlersList.hpp | 6 ++-- 7 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index 1e279ae4..12283bea 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -86,25 +86,25 @@ bool menus::call(Engine& engine, runnable func) { engine.setScreen(std::make_shared(engine)); // could not to find or read pack guiutil::alert( - gui->getMenu(), langs::get(L"error.pack-not-found")+L": "+ + engine, langs::get(L"error.pack-not-found")+L": "+ util::str2wstr_utf8(error.getPackId()) ); return false; } catch (const assetload::error& error) { engine.setScreen(std::make_shared(engine)); guiutil::alert( - gui->getMenu(), langs::get(L"Assets Load Error", L"menu")+L":\n"+ + engine, langs::get(L"Assets Load Error", L"menu")+L":\n"+ util::str2wstr_utf8(error.what()) ); return false; } catch (const parsing_error& error) { engine.setScreen(std::make_shared(engine)); - guiutil::alert(gui->getMenu(), util::str2wstr_utf8(error.errorLog())); + guiutil::alert(engine, util::str2wstr_utf8(error.errorLog())); return false; } catch (const std::runtime_error& error) { engine.setScreen(std::make_shared(engine)); guiutil::alert( - gui->getMenu(), langs::get(L"Content Error", L"menu")+L":\n"+ + engine, langs::get(L"Content Error", L"menu")+L":\n"+ util::str2wstr_utf8(error.what()) ); return false; diff --git a/src/graphics/ui/gui_util.cpp b/src/graphics/ui/gui_util.cpp index 84c5934a..a94c3a94 100644 --- a/src/graphics/ui/gui_util.cpp +++ b/src/graphics/ui/gui_util.cpp @@ -27,12 +27,22 @@ std::shared_ptr guiutil::create(const std::string& source, scripten } void guiutil::alert( - const std::shared_ptr& menu, + Engine& engine, const std::wstring& text, const runnable& on_hidden ) { auto panel = std::make_shared(glm::vec2(500, 300), glm::vec4(8.0f), 8.0f); panel->setColor(glm::vec4(0.0f, 0.0f, 0.0f, 0.5f)); + + auto menu = engine.getGUI()->getMenu(); + runnable on_hidden_final = [on_hidden, menu, &engine]() { + if (on_hidden) { + on_hidden(); + } else { + menu->back(); + } + menu->removePage(""); + }; auto label = std::make_shared