From ef656e9ff1a0a5074aabf0470005aa5a2227bf39 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 12 Nov 2025 18:49:04 +0300 Subject: [PATCH] revert non-throwing 'id' and add 'exists' property & update doc/*/scripting/ui.md --- doc/en/scripting/ui.md | 1 + doc/ru/scripting/ui.md | 1 + src/logic/scripting/lua/libs/libgui.cpp | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/en/scripting/ui.md b/doc/en/scripting/ui.md index 80750501..c35bf908 100644 --- a/doc/en/scripting/ui.md +++ b/doc/en/scripting/ui.md @@ -37,6 +37,7 @@ Properties that apply to all elements: | Name | Type | Read | Write | Description | | ------------- | ------- | ---- | ----- | ------------------------------------------- | | id | string | yes | *no* | element id | +| exists | bool | yes | *no* | checks if element exists | | pos | vec2 | yes | yes | element position inside a container | | wpos | vec2 | yes | yes | element position inside the window | | size | vec2 | yes | yes | element size | diff --git a/doc/ru/scripting/ui.md b/doc/ru/scripting/ui.md index c6c769ac..a6d6006d 100644 --- a/doc/ru/scripting/ui.md +++ b/doc/ru/scripting/ui.md @@ -37,6 +37,7 @@ document["worlds-panel"]:clear() | Название | Тип | Чтение | Запись | Описание | | ------------- | ------- | ------ | ------ | ----------------------------------------- | | id | string | да | *нет* | идентификатор элемента | +| exists | bool | да | *нет* | проверяет, существует ли элемент | | pos | vec2 | да | да | позиция элемента внутри контейнера | | wpos | vec2 | да | да | позиция элемента в окне | | size | vec2 | да | да | размер элемента | diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index a051aa56..cdf65898 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -546,8 +546,12 @@ static int p_get_options(UINode* node, lua::State* L) { return 0; } +static int p_is_exists(UINode* node, lua::State* L) { + return lua::pushboolean(L, node != nullptr); +} + static bool is_node_required(std::string_view attr) { - return attr != "id"; + return attr != "exists"; } static int l_gui_getattr(lua::State* L) { @@ -585,6 +589,7 @@ static int l_gui_getattr(lua::State* L) { std::function> getters { {"id", p_get_id}, + {"exists", p_is_exists}, {"color", p_get_color}, {"hoverColor", p_get_hover_color}, {"pressedColor", p_get_pressed_color},