From c798906f61375b8eca081da3d3ac7a6177b9c19a Mon Sep 17 00:00:00 2001 From: grorp Date: Wed, 1 Jan 2025 17:00:09 +0100 Subject: [PATCH] Integration work pt. 1: settings button -> Lua error --- src/client/game_formspec.cpp | 13 +++++++++++++ src/gui/mainmenumanager.h | 7 +++++++ src/script/cpp_api/s_pause_menu.cpp | 11 ++--------- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/client/game_formspec.cpp b/src/client/game_formspec.cpp index 4c3bbb04a..ea15f5de1 100644 --- a/src/client/game_formspec.cpp +++ b/src/client/game_formspec.cpp @@ -86,6 +86,11 @@ struct LocalFormspecHandler : public TextDest void gotText(const StringMap &fields) { if (m_formname == "MT_PAUSE_MENU") { + if (fields.find("btn_settings") != fields.end()) { + g_gamecallback->openSettings(); + return; + } + if (fields.find("btn_sound") != fields.end()) { g_gamecallback->changeVolume(); return; @@ -331,6 +336,9 @@ void GameFormSpec::showPauseMenu() os << "field[4.95,0;5,1.5;;" << strgettext("Game paused") << ";]"; } + os << "button_exit[4," << (ypos++) << ";3,0.5;btn_settings;" + << strgettext("Settings") << "]"; + #ifndef __ANDROID__ #if USE_SOUND if (g_settings->getBool("enable_sound")) { @@ -474,6 +482,11 @@ bool GameFormSpec::handleCallbacks() return false; } + if (g_gamecallback->settings_requested) { + m_pause_script->open_settings(); + g_gamecallback->settings_requested = false; + } + if (g_gamecallback->changepassword_requested) { (void)make_irr(guienv, guiroot, -1, &g_menumgr, m_client, texture_src); diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index 9d10e3960..39d06ed14 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -15,6 +15,7 @@ class IGameCallback { public: virtual void exitToOS() = 0; + virtual void openSettings() = 0; virtual void keyConfig() = 0; virtual void disconnect() = 0; virtual void changePassword() = 0; @@ -109,6 +110,11 @@ public: shutdown_requested = true; } + void openSettings() override + { + settings_requested = true; + } + void disconnect() override { disconnect_requested = true; @@ -145,6 +151,7 @@ public: } bool disconnect_requested = false; + bool settings_requested = false; bool changepassword_requested = false; bool changevolume_requested = false; bool keyconfig_requested = false; diff --git a/src/script/cpp_api/s_pause_menu.cpp b/src/script/cpp_api/s_pause_menu.cpp index b660226ac..9f4cdfb94 100644 --- a/src/script/cpp_api/s_pause_menu.cpp +++ b/src/script/cpp_api/s_pause_menu.cpp @@ -11,17 +11,10 @@ void ScriptApiPauseMenu::open_settings() int error_handler = PUSH_ERROR_HANDLER(L); - // Get handler function lua_getglobal(L, "core"); lua_getfield(L, -1, "open_settings"); - lua_remove(L, -2); // Remove core - if (lua_isnil(L, -1)) { - lua_pop(L, 1); // Pop open_settings - return; - } - luaL_checktype(L, -1, LUA_TFUNCTION); - // Call it PCALL_RES(lua_pcall(L, 0, 0, error_handler)); - lua_pop(L, 1); // Pop error handler + + lua_pop(L, 2); // Pop core, error handler }