diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index c8301d26..89789e29 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -756,3 +756,13 @@ void Hud::setAllowPause(bool flag) { } allowPause = flag; } + +bool Hud::isOpen(const std::string& layoutid) const { + for (const auto& element : elements) { + auto doc = element.getDocument(); + if (doc && doc->getId() == layoutid) { + return true; + } + } + return false; +} diff --git a/src/frontend/hud.hpp b/src/frontend/hud.hpp index c0c7d1ef..560382d3 100644 --- a/src/frontend/hud.hpp +++ b/src/frontend/hud.hpp @@ -213,6 +213,8 @@ public: void setAllowPause(bool flag); + bool isOpen(const std::string& layoutid) const; + static bool showGeneratorMinimap; /// @brief Runtime updating debug visualization texture diff --git a/src/logic/scripting/lua/libs/libhud.cpp b/src/logic/scripting/lua/libs/libhud.cpp index e3d29783..7ab5d33c 100644 --- a/src/logic/scripting/lua/libs/libhud.cpp +++ b/src/logic/scripting/lua/libs/libhud.cpp @@ -189,6 +189,11 @@ static int l_reload_script(lua::State* L) { return 0; } +static int l_is_open(lua::State* L) { + auto layoutid = lua::require_string(L, 1); + return lua::pushboolean(L, hud->isOpen(layoutid)); +} + const luaL_Reg hudlib[] = { {"open_inventory", wrap_hud}, {"close_inventory", wrap_hud}, @@ -208,5 +213,6 @@ const luaL_Reg hudlib[] = { {"_set_debug_cheats", wrap_hud}, {"set_allow_pause", wrap_hud}, {"reload_script", wrap_hud}, + {"is_open", wrap_hud}, {nullptr, nullptr} };