From 1d314ae3d938112a54d9c8fe8a4061cbd67e8ed5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 6 Oct 2025 20:42:24 +0300 Subject: [PATCH 1/7] cleanup --- src/logic/scripting/scripting.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/logic/scripting/scripting.cpp b/src/logic/scripting/scripting.cpp index 997b5f82..4d3672f1 100644 --- a/src/logic/scripting/scripting.cpp +++ b/src/logic/scripting/scripting.cpp @@ -182,7 +182,6 @@ std::unique_ptr scripting::start_coroutine(const io::path& script) { lua::pushstring(L, pack.id); lua::setfield(L, "PACK_ID"); - lua::dump_stack(L); if(!lua::getglobal(L, "__vc__pack_envs")) { lua::createtable(L, 0, 0); lua::setglobal(L, "__vc__pack_envs"); From 8a858beeb421495247a8dfae064672bcf6eb4190 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 6 Oct 2025 20:53:29 +0300 Subject: [PATCH 2/7] fix: some container attributes not available in panel --- res/layouts/pages/worlds.xml | 1 - src/graphics/ui/gui_xml.cpp | 60 +++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/res/layouts/pages/worlds.xml b/res/layouts/pages/worlds.xml index 13765930..a8a536a2 100644 --- a/res/layouts/pages/worlds.xml +++ b/res/layouts/pages/worlds.xml @@ -1,5 +1,4 @@ - diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index 930aef34..18d0fa4b 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -8,19 +8,17 @@ #include "elements/Button.hpp" #include "elements/Canvas.hpp" #include "elements/CheckBox.hpp" -#include "elements/TextBox.hpp" -#include "elements/SplitBox.hpp" -#include "elements/TrackBar.hpp" -#include "elements/SelectBox.hpp" #include "elements/Image.hpp" #include "elements/InlineFrame.hpp" #include "elements/InputBindBox.hpp" #include "elements/InventoryView.hpp" #include "elements/Menu.hpp" +#include "elements/ModelViewer.hpp" #include "elements/Panel.hpp" +#include "elements/SelectBox.hpp" +#include "elements/SplitBox.hpp" #include "elements/TextBox.hpp" #include "elements/TrackBar.hpp" -#include "elements/ModelViewer.hpp" #include "engine/Engine.hpp" #include "frontend/locale.hpp" #include "frontend/menu.hpp" @@ -197,7 +195,10 @@ static void read_uinode( } static void read_container_impl( - UiXmlReader& reader, const xml::xmlelement& element, Container& container + UiXmlReader& reader, + const xml::xmlelement& element, + Container& container, + bool subnodes ) { read_uinode(reader, element, container); @@ -207,6 +208,9 @@ static void read_container_impl( if (element.has("scroll-step")) { container.setScrollStep(element.attr("scroll-step").asInt()); } + if (!subnodes) { + return; + } for (auto& sub : element.getElements()) { if (sub->isText()) continue; auto subnode = reader.readUINode(*sub); @@ -219,7 +223,7 @@ static void read_container_impl( void UiXmlReader::readUINode( UiXmlReader& reader, const xml::xmlelement& element, Container& container ) { - read_container_impl(reader, element, container); + read_container_impl(reader, element, container, true); } void UiXmlReader::readUINode( @@ -229,11 +233,9 @@ void UiXmlReader::readUINode( } static void read_base_panel_impl( - UiXmlReader& reader, - const xml::xmlelement& element, - BasePanel& panel + UiXmlReader& reader, const xml::xmlelement& element, BasePanel& panel ) { - read_uinode(reader, element, panel); + read_container_impl(reader, element, panel, false); if (element.has("padding")) { glm::vec4 padding = element.attr("padding").asVec4(); @@ -244,7 +246,7 @@ static void read_base_panel_impl( )); } if (element.has("orientation")) { - auto &oname = element.attr("orientation").getText(); + auto& oname = element.attr("orientation").getText(); if (oname == "horizontal") { panel.setOrientation(Orientation::horizontal); } @@ -348,7 +350,7 @@ static std::shared_ptr read_container( UiXmlReader& reader, const xml::xmlelement& element ) { auto container = std::make_shared(reader.getGUI(), glm::vec2()); - read_container_impl(reader, element, *container); + read_container_impl(reader, element, *container, true); return container; } @@ -365,8 +367,7 @@ static std::shared_ptr read_split_box( ); read_base_panel_impl(reader, element, *splitBox); for (auto& sub : element.getElements()) { - if (sub->isText()) - continue; + if (sub->isText()) continue; auto subnode = reader.readUINode(*sub); if (subnode) { splitBox->add(subnode); @@ -379,15 +380,15 @@ static std::shared_ptr read_model_viewer( UiXmlReader& reader, const xml::xmlelement& element ) { auto model = element.attr("src", "").getText(); - auto viewer = std::make_shared( - reader.getGUI(), glm::vec2(), model - ); - read_container_impl(reader, element, *viewer); + auto viewer = + std::make_shared(reader.getGUI(), glm::vec2(), model); + read_container_impl(reader, element, *viewer, true); if (element.has("center")) { viewer->setCenter(element.attr("center").asVec3()); } if (element.has("cam-rotation")) { - viewer->setRotation(glm::radians(element.attr("cam-rotation").asVec3())); + viewer->setRotation(glm::radians(element.attr("cam-rotation").asVec3()) + ); } return viewer; } @@ -450,7 +451,8 @@ static std::shared_ptr read_select( } auto value = elem->attr("value").getText(); auto text = parse_inner_text(*elem, reader.getContext()); - options.push_back(SelectBox::Option {std::move(value), std::move(text)}); + options.push_back(SelectBox::Option {std::move(value), std::move(text)} + ); } if (element.has("selected")) { @@ -485,10 +487,9 @@ static std::shared_ptr read_select( element.attr("onselect").getText(), reader.getFilename() ); - selectBox->listenChange( - [callback=std::move(callback)](GUI&, const std::string& value) { - callback(value); - }); + selectBox->listenChange([callback = std::move(callback)]( + GUI&, const std::string& value + ) { callback(value); }); } read_panel_impl(reader, element, *selectBox, false); return selectBox; @@ -539,7 +540,7 @@ static std::shared_ptr read_text_box( ); textbox->setHint(hint); - read_container_impl(reader, element, *textbox); + read_container_impl(reader, element, *textbox, true); if (element.has("padding")) { glm::vec4 padding = element.attr("padding").asVec4(); textbox->setPadding(padding); @@ -839,7 +840,7 @@ static std::shared_ptr read_page_box( auto& gui = reader.getGUI(); auto menu = std::make_shared(gui); menu->setPageLoader(gui.getMenu()->getPageLoader()); - read_container_impl(reader, element, *menu); + read_container_impl(reader, element, *menu, true); return menu; } @@ -849,14 +850,15 @@ static std::shared_ptr read_iframe( ) { auto& gui = reader.getGUI(); auto iframe = std::make_shared(gui); - read_container_impl(reader, element, *iframe); + read_container_impl(reader, element, *iframe, true); std::string src = element.attr("src", "").getText(); iframe->setSrc(src); return iframe; } -UiXmlReader::UiXmlReader(gui::GUI& gui, scriptenv&& env) : gui(gui), env(std::move(env)) { +UiXmlReader::UiXmlReader(gui::GUI& gui, scriptenv&& env) + : gui(gui), env(std::move(env)) { contextStack.emplace(""); add("image", read_image); add("canvas", read_canvas); From b4ba2da95524025991f07be87b61ecc015f12656 Mon Sep 17 00:00:00 2001 From: RomanDonw Date: Fri, 10 Oct 2025 20:59:01 +1000 Subject: [PATCH 3/7] generation.load_fragment fix --- src/logic/scripting/lua/libs/libgeneration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libgeneration.cpp b/src/logic/scripting/lua/libs/libgeneration.cpp index ed406bf7..681977e8 100644 --- a/src/logic/scripting/lua/libs/libgeneration.cpp +++ b/src/logic/scripting/lua/libs/libgeneration.cpp @@ -44,7 +44,7 @@ static int l_create_fragment(lua::State* L) { static int l_load_fragment(lua::State* L) { dv::value map; - if (!lua::isstring(L, 1)) { + if (lua::isstring(L, 1)) { io::path path = lua::require_string(L, 1); if (!io::exists(path)) { throw std::runtime_error("file "+path.string()+" does not exist"); From 2a9507b54e58f852b558d7bc9b2cc88397d37a34 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 10 Oct 2025 19:57:53 +0300 Subject: [PATCH 4/7] fix: byteutil.unpack 'b' is equivalent of 'B' --- src/logic/scripting/lua/libs/libbyteutil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logic/scripting/lua/libs/libbyteutil.cpp b/src/logic/scripting/lua/libs/libbyteutil.cpp index 54485fc1..429f0feb 100644 --- a/src/logic/scripting/lua/libs/libbyteutil.cpp +++ b/src/logic/scripting/lua/libs/libbyteutil.cpp @@ -137,7 +137,7 @@ static int l_unpack(lua::State* L) { for (size_t i = 0; format[i]; i++) { switch (format[i]) { case 'b': - lua::pushinteger(L, reader.get()); + lua::pushinteger(L, static_cast(reader.get())); break; case 'B': lua::pushinteger(L, reader.get() & 0xFF); From 5755c616f35cc1c1fc5e94ecbc9c38a5a7f52275 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 13 Oct 2025 12:29:09 +0300 Subject: [PATCH 5/7] fix: missing yaml null literals --- src/coders/yaml.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/coders/yaml.cpp b/src/coders/yaml.cpp index b10d5ce2..33eab3a5 100644 --- a/src/coders/yaml.cpp +++ b/src/coders/yaml.cpp @@ -38,7 +38,7 @@ static dv::value perform_literal(std::string_view literal) { literal == "false" || literal == "False") { return literal[0] == 't'; } - if (literal == "null" || literal == "Null") { + if (literal == "null" || literal == "Null" || literal == "~") { return nullptr; } return std::string(literal); @@ -204,8 +204,9 @@ dv::value Parser::parseFullValue(int indent) { skipEmptyLines(); int init_pos = pos; int next_indent = countIndent(); - if (next_indent < indent) { - throw error("indentation error"); + if (next_indent <= indent) { + pos = init_pos; + return nullptr; } if (source[pos] == '-') { pos = init_pos; From 026ae756cf4ad4a4febbef58ce2f007b2a0fc974 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 13 Oct 2025 23:09:24 +0300 Subject: [PATCH 6/7] fix yaml array parsing --- src/coders/BasicParser.inl | 6 +++++- src/coders/yaml.cpp | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/coders/BasicParser.inl b/src/coders/BasicParser.inl index 7af27fe5..796205b2 100644 --- a/src/coders/BasicParser.inl +++ b/src/coders/BasicParser.inl @@ -139,8 +139,12 @@ void BasicParser::skipLine() { template void BasicParser::skipEmptyLines() { + if (!hasNext()) { + return; + } + size_t initpos = pos; skipWhitespace(); - pos = linestart; + pos = std::max(initpos, linestart); } template diff --git a/src/coders/yaml.cpp b/src/coders/yaml.cpp index 33eab3a5..f400f667 100644 --- a/src/coders/yaml.cpp +++ b/src/coders/yaml.cpp @@ -270,6 +270,10 @@ dv::value Parser::parseArray(int indent) { dv::value object = dv::object(); object[std::string(name)] = parseFullValue(next_indent); skipEmptyLines(); + if (!hasNext()) { + list.add(std::move(object)); + break; + } next_indent = countIndent(); if (next_indent > indent) { pos = linestart; From a1f0c2c2527b91d3a1d4f47eb2c043ebdef60119 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 14 Oct 2025 21:44:14 +0300 Subject: [PATCH 7/7] fix mouse click textbox caret set --- src/graphics/ui/elements/TextBox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/ui/elements/TextBox.cpp b/src/graphics/ui/elements/TextBox.cpp index 81732348..c9afde7f 100644 --- a/src/graphics/ui/elements/TextBox.cpp +++ b/src/graphics/ui/elements/TextBox.cpp @@ -661,7 +661,7 @@ int TextBox::calcIndexAt(int x, int y) const { line = std::min(line, label->getLinesNumber() - 1); size_t lineLength = getLineLength(line); uint offset = 0; - while (lcoord.x + rawTextCache.metrics.calcWidth(labelText, offset) < x && + while (lcoord.x + rawTextCache.metrics.calcWidth(labelText, 0, offset) < x && offset < lineLength - 1) { offset++; }