From d2795f03ad9faee4ab458a2a18287b3f61feaf25 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 15 Jul 2025 21:13:58 +0300 Subject: [PATCH 1/8] update CHANGELOG.md to 0.28 --- CHANGELOG.md | 145 +++++++++++++++++++-------------------------------- 1 file changed, 54 insertions(+), 91 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e31c2ff..b41f15b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ -# 0.27 - 2025.03.25 +# 0.28 - 2025.07.18 -[Documentation](https://github.com/MihailRis/VoxelEngine-Cpp/tree/release-0.27/doc/en/main-page.md) for 0.27 +[Documentation](https://github.com/MihailRis/VoxelEngine-Cpp/tree/release-0.28/doc/en/main-page.md) for 0.28 Table of contents: @@ -11,101 +11,64 @@ Table of contents: ## Added -- items data -- weather -- work with ZIP-files -- splitbox ui element -- history in textbox -- reloading content scripts within the editor -- libraries: - - gfx.weather -- [add side mouse buttons](https://github.com/MihailRis/VoxelEngine-Cpp/pull/461) -- item properties: - - uses - - uses-display -- textbox attributes: - - oncontrolkey -- container attributes: - - scroll -- multiline tooltips suppoirt -- ['@' prefix support in tooltips](https://github.com/MihailRis/VoxelEngine-Cpp/commit/fa990e393986aad07e9fb9a570338b08fd4f9a0c) +- advanced graphics mode +- state bits based models +- post-effects +- ui elements: + - iframe + - select + - modelviewer +- vcm models format +- bit.compile +- yaml encoder/decoder +- error handler argument in http.get, http.post +- ui properties: + - image.region +- rotation profiles: + - stairs +- libraries + - gfx.posteffects + - yaml +- stairs rotation profile +- models editing in console +- syntax highlighting: xml, glsl, vcm +- beginning of projects system ### Changes -- file subsystem upgrade -- code editor upgrade -- block materials update -- actual file path now may be specified in audio.play_stream/play_stream_2d call. +- reserved 'project', 'pack', 'packid', 'root' entry points +- Bytearray optimized with FFI +- chunks non-unloading zone limited with circle ### Functions -- file.create_zip -- file.mount -- file.unmount -- file.path -- file.parent -- file.join -- pack.request_writeable -- crc32 -- table.merge -- table.map -- table.filter -- table.set_default -- table.flat -- table.deep_flat -- table.sub -- math.sum -- string.pad -- string.left_pad -- string.right_pad -- block.reload_script -- world.reload_script -- entities.reload_component -- hud.reload_script -- item.reload_script -- gfx.weather.change -- gfx.weather.get_current -- gfx.weather.get_current_data -- gfx.weather.get_fall_intensity -- gfx.weather.is_transition -- inventory.decrement -- inventory.use -- inventory.set_count -- inventory.get_data -- inventory.set_data -- inventory.get_all_data -- inventory.has_data -- item.uses -- core.capture_output - -Methods: - -- canvas:set_data -- canvas:line -- canvas:blit -- canvas:clear -- canvas:create_texture +- yaml.tostring +- yaml.parse +- gfx.posteffects.index +- gfx.posteffects.set_effect +- gfx.posteffects.get_intensity +- gfx.posteffects.set_intensity +- gfx.posteffects.is_active +- gfx.posteffects.set_params +- gfx.posteffects.set_array +- block.get_variant +- block.set_variant +- bit.compile +- Bytearray_as_string ## Fixes -- [fix incorrect entity transform scale & rotation combination](https://github.com/MihailRis/VoxelEngine-Cpp/commit/b832b9850f709053b43714bb0e3481560711e872) -- [fix syntax highlighting not refreshing on selected text removal](https://github.com/MihailRis/VoxelEngine-Cpp/commit/33795f06f710de569a24b2d1937310b16dd040f5) -- [fix TextBox behavior with markup used](https://github.com/MihailRis/VoxelEngine-Cpp/commit/31d5cb68800d965a668a67fd60bb4d3365181242) -- [fix: console/chat open still available when menu is open & cleanup](https://github.com/MihailRis/VoxelEngine-Cpp/commit/c7061c70cb3b6382197c93d9442bfbb4c9fc1def) -- [fix: Label.cpp: uinode size](https://github.com/MihailRis/VoxelEngine-Cpp/commit/6e8a4bacff77b7eba39393bcc8a5fb417a288884) -- [fix: camera rotation not updating when menu is open](https://github.com/MihailRis/VoxelEngine-Cpp/commit/801354c15d96343b00963183f6f08219bd375ee8) -- [fix stack split (right click) with item data](https://github.com/MihailRis/VoxelEngine-Cpp/commit/6ef82982bdc813bfc5c0ed2437a1a3fa9a2242d1) -- [fix stack increment (right click) with item data](https://github.com/MihailRis/VoxelEngine-Cpp/commit/449b0ebca464f913f63913ad7af91811c717c349) -- [fix caves generation](https://github.com/MihailRis/VoxelEngine-Cpp/commit/4c8b0824181f05aa5611a1e077f999788f575c42) -- [fix: incorrect UV on custom model blocks](https://github.com/MihailRis/VoxelEngine-Cpp/commit/12105c29335481de429c8e6acc953e8cbcdc6ecf) -- [bug fix content_menu.xml.lua](https://github.com/MihailRis/VoxelEngine-Cpp/commit/15e143afb0364f816a1033868b2501c9a9e69fda) -- [fix: disabled bodies not skipping in entities raycast](https://github.com/MihailRis/VoxelEngine-Cpp/commit/5e10afc9b5d6582617fe34ec37abdb682e46197a) -- [table.filter bug fix](https://github.com/MihailRis/VoxelEngine-Cpp/pull/481) -- [fix: incorrect canvas Y direction](https://github.com/MihailRis/VoxelEngine-Cpp/commit/ee3fbc68314865384d2a7d78a22221b5987979a4) -- [fix fatal error on audio.play_sound in headless-mode](https://github.com/MihailRis/VoxelEngine-Cpp/commit/a74a4fcf5366c8f78625f7087f42a8150f6896e0) -- [fix BasicParser '\v' and '\x' escapes](https://github.com/MihailRis/VoxelEngine-Cpp/commit/8b0935d2b745acb11cba9c8bc647b4186d1817a3) -- [fix: entity:despawn in on_save not preventing entity save](https://github.com/MihailRis/VoxelEngine-Cpp/pull/480) -- [fix syntax highlighting unicode support](https://github.com/MihailRis/VoxelEngine-Cpp/pull/475) -- [fix reading binary file as string](https://github.com/MihailRis/VoxelEngine-Cpp/commit/104cc116456aba6e569892521ecae92d8bf6b9ff) -- [fix inventory.move_range](https://github.com/MihailRis/VoxelEngine-Cpp/commit/f5a4b5ca79806418b0736d3f84e9efa8d9992a34) -- [fix: multiline text draw is not limited to the render area](https://github.com/MihailRis/VoxelEngine-Cpp/commit/a8067ad9d634cb3fc4632378277d62b32e4afb15) +- [fix: "unknown argument --memcheck" in vctest](https://github.com/MihailRis/voxelcore/commit/281d5e09e6f1c016646af6000f6b111695c994b3) +- [fix "upgrade square is not fully inside of area" error](https://github.com/MihailRis/voxelcore/commit/bf79f6bc75a7686d59fdd0dba8b9018d6191e980 ) +- [fix generator area centering](https://github.com/MihailRis/voxelcore/commit/98813472a8c25b1de93dd5d843af38c5aec9b1d8 "fix generator area centering") +- [fix incomplete content reset](https://github.com/MihailRis/voxelcore/commit/61af8ba943a24f6544c6482def2e244cf0af4d18) +- [fix stack traces](https://github.com/MihailRis/voxelcore/commit/05ddffb5c9902e237c73cdea55d4ac1e303c6a8e) +- [fix containers refreshing](https://github.com/MihailRis/voxelcore/commit/34295faca276b55c6e3c0ddd98b867a0aab3eb2a) +- [fix toml encoder](https://github.com/MihailRis/voxelcore/commit/9cd95bb0eb73521bef07f6f0d5e8b78f3e309ebf) +- [fix InputBindBox](https://github.com/MihailRis/voxelcore/commit/7c976a573b01e3fb6f43bacaab22e34037b55b73 "fix InputBindBox") +- [fix inventory.* functions error messages](https://github.com/MihailRis/voxelcore/commit/af3c315c04959eea6c11f5ae2854a6f253e3450f) +- [fix: validator not called after backspace](https://github.com/MihailRis/voxelcore/commit/df3640978d279b85653d647facb26ef15c509848) +- [fix: missing pack.has_indices if content is not loaded](https://github.com/MihailRis/voxelcore/commit/b02b45457322e1ce8f6b9735caeb5b58b1e2ffb4) +- [fix: entities despawn on F5](https://github.com/MihailRis/voxelcore/commit/6ab48fda935f3f1d97d76a833c8511522857ba6a) +- [bug fix [#549]](https://github.com/MihailRis/voxelcore/commit/49727ec02647e48323266fbf814c15f6d5632ee9) +- [fix player camera zoom with fov-effects disabled](https://github.com/MihailRis/voxelcore/commit/014ffab183687ed9acbb93ab90e43d8f82ed826a) From 53c777319324e7dfaa3ea00cbe1400d96f96253a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 15 Jul 2025 21:35:08 +0300 Subject: [PATCH 2/8] update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18ad6c49..c3b512f6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ## Latest release - [Download](https://github.com/MihailRis/VoxelCore/releases/latest) | [Скачать](https://github.com/MihailRis/VoxelCore/releases/latest) -- [Documentation](https://github.com/MihailRis/VoxelCore/blob/release-0.27/doc/en/main-page.md) | [Документация](https://github.com/MihailRis/VoxelCore/blob/release-0.27/doc/ru/main-page.md) +- [Documentation](https://github.com/MihailRis/VoxelCore/blob/release-0.28/doc/en/main-page.md) | [Документация](https://github.com/MihailRis/VoxelCore/blob/release-0.28/doc/ru/main-page.md) ## Build project in Linux From fdeec225155e32f36205d1010c12530245708e05 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 18 Jul 2025 20:27:38 +0300 Subject: [PATCH 3/8] improve lights --- res/shaders/main.glslv | 2 ++ src/graphics/render/WorldRenderer.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/res/shaders/main.glslv b/res/shaders/main.glslv index 8fd38d20..4d50e5d9 100644 --- a/res/shaders/main.glslv +++ b/res/shaders/main.glslv @@ -51,7 +51,9 @@ void main() { mat4 viewmodel = u_view * u_model; a_distance = length(viewmodel * vec4(pos3d, 0.0)); +#ifndef ADVANCED_RENDER a_fog = calc_fog(length(viewmodel * vec4(pos3d * FOG_POS_SCALE, 0.0)) / 256.0); +#endif a_emission = v_normal.w; vec4 viewmodelpos = u_view * a_modelpos; diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 1e77272b..93039d2c 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -164,14 +164,14 @@ void WorldRenderer::setupWorldShader( auto inventory = player.getInventory(); ItemStack& stack = inventory->getSlot(player.getChosenSlot()); auto& item = indices->items.require(stack.getItemId()); - float multiplier = 0.5f; + float multiplier = 0.75f; shader.uniform3f( "u_torchlightColor", item.emission[0] / 15.0f * multiplier, item.emission[1] / 15.0f * multiplier, item.emission[2] / 15.0f * multiplier ); - shader.uniform1f("u_torchlightDistance", 6.0f); + shader.uniform1f("u_torchlightDistance", 8.0f); } } From 0b598630d049c2192f753fc12100769a36acb15e Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 18 Jul 2025 22:57:38 +0300 Subject: [PATCH 4/8] fix: writeables not reset after world close --- src/io/engine_paths.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/io/engine_paths.cpp b/src/io/engine_paths.cpp index 4c424f95..3526f387 100644 --- a/src/io/engine_paths.cpp +++ b/src/io/engine_paths.cpp @@ -220,6 +220,7 @@ void EnginePaths::cleanup() { io::remove_device(entryPoint); } entryPoints.clear(); + writeables.clear(); } void EnginePaths::setEntryPoints(std::vector entryPoints) { From 411f0e53a68c78a95598ed2bd7b06583a12dcaa8 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Jul 2025 11:47:05 +0300 Subject: [PATCH 5/8] fix syntax hightlight for vcm --- res/devtools/syntax/vcm.toml | 2 +- src/coders/syntax_parser.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/res/devtools/syntax/vcm.toml b/res/devtools/syntax/vcm.toml index 524fdc80..96f1e095 100644 --- a/res/devtools/syntax/vcm.toml +++ b/res/devtools/syntax/vcm.toml @@ -1,6 +1,6 @@ language = "VCM" extensions = ["vcm"] -line-comment-start = "#" +line-comment = "#" keywords = [ "on", "off" ] diff --git a/src/coders/syntax_parser.cpp b/src/coders/syntax_parser.cpp index 4b56b607..871cd314 100644 --- a/src/coders/syntax_parser.cpp +++ b/src/coders/syntax_parser.cpp @@ -151,6 +151,12 @@ public: return std::wstring(source.substr(start, pos - start)); } + void emitLineComment(devtools::Location start) { + auto string = readUntilEOL(); + emitToken(TokenTag::COMMENT, std::wstring(string), start); + skipLine(); + } + std::vector tokenize() { skipWhitespace(); while (hasNext()) { @@ -229,16 +235,18 @@ public: } if (is_lua_operator_start(c)) { auto text = parseOperator(); - if (text == L"--") { - auto string = readUntilEOL(); - emitToken(TokenTag::COMMENT, std::wstring(string), start); - skipLine(); + if (text == syntax.lineComment) { + emitLineComment(start); continue; } emitToken(TokenTag::OPERATOR, std::move(text), start); continue; } auto text = readUntilWhitespace(); + if (text.find(syntax.lineComment) == 0) { + emitLineComment(start); + continue; + } emitToken(TokenTag::UNEXPECTED, std::wstring(text), start); } return std::move(tokens); From 3b4d5ebfc7cdec998e0ad293d26966a922e3dab4 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Jul 2025 12:13:51 +0300 Subject: [PATCH 6/8] fix --- src/frontend/ContentGfxCache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/ContentGfxCache.cpp b/src/frontend/ContentGfxCache.cpp index 18645259..71492626 100644 --- a/src/frontend/ContentGfxCache.cpp +++ b/src/frontend/ContentGfxCache.cpp @@ -67,7 +67,7 @@ void ContentGfxCache::refresh(const Block& def, const Atlas& atlas) { if (def.variants) { const auto& variants = def.variants->variants; for (int i = 1; i < variants.size() - 1; i++) { - refresh_variant(assets, def, variants[i], i + 1, sideregions, atlas, settings, models); + refresh_variant(assets, def, variants[i], i, sideregions, atlas, settings, models); } def.variants->variants.at(0) = def.defaults; } From c30ce8affb1216f3c294cdb9712b8386b1b2e7b3 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Jul 2025 14:49:39 +0300 Subject: [PATCH 7/8] update doc/*/scripting/ui.md --- doc/en/scripting/ui.md | 1 + doc/ru/scripting/ui.md | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/doc/en/scripting/ui.md b/doc/en/scripting/ui.md index 1ddafdba..2da6843c 100644 --- a/doc/en/scripting/ui.md +++ b/doc/en/scripting/ui.md @@ -75,6 +75,7 @@ Common methods: | ------------------------------- | -------------------------------------------------------------------------------------------- | | clear() | clears content | | add(xml) | adds an element, creating it using xml code. Example: `container:add("")` | +| add(xml, data) | overload with table, which in events declared in xml will be available as DATA | | setInterval(interval, callback) | assigns a function to be executed repeatedly at an interval specified in milliseconds | ## Textbox diff --git a/doc/ru/scripting/ui.md b/doc/ru/scripting/ui.md index d61d2af3..19f1f8ab 100644 --- a/doc/ru/scripting/ui.md +++ b/doc/ru/scripting/ui.md @@ -71,11 +71,12 @@ document["worlds-panel"]:clear() Методы: -| Метод | Описание | -| ------------------------------- | ------------------------------------------------------------------------------------------- | -| clear() | очищает контент | -| add(xml) | добавляет элемент, создавая его по xml коду. Пример: `container:add("")` | -| setInterval(interval, callback) | назначает функцию на повторяющееся выполнение с заданным в миллисекундах интервалом | +| Метод | Описание | +| ------------------------------- | --------------------------------------------------------------------------------------------- | +| clear() | очищает контент | +| add(xml) | добавляет элемент, создавая его по xml коду. Пример: `container:add("")` | +| add(xml, data) | перегрузка с передачей таблицы, которая в событиях, объявленных в xml будет доступна как DATA | +| setInterval(interval, callback) | назначает функцию на повторяющееся выполнение с заданным в миллисекундах интервалом | ## Текстовое поле (textbox) From f3ee18997379a2b36518f8fc6937e33a3c7717f5 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 19 Jul 2025 14:50:25 +0300 Subject: [PATCH 8/8] add vcm docs --- doc/ru/main-page.md | 1 + doc/ru/vcm.md | 49 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 doc/ru/vcm.md diff --git a/doc/ru/main-page.md b/doc/ru/main-page.md index e4a9dc61..eda864e8 100644 --- a/doc/ru/main-page.md +++ b/doc/ru/main-page.md @@ -20,3 +20,4 @@ - [Скриптинг](scripting.md) - [Стили текста](text-styles.md) - [Частицы](particles.md) +- [Формат моделей VCM](vcm.md) diff --git a/doc/ru/vcm.md b/doc/ru/vcm.md new file mode 100644 index 00000000..9e52ca49 --- /dev/null +++ b/doc/ru/vcm.md @@ -0,0 +1,49 @@ +## VCM + +Текстовый формат описания 3D моделей, являющийся заменой устаревшего свойства `model-primitives`. + +Синтаксис: + +``` +@примитив атрибут (значение1,значение2,...) атрибут2 "значение3" { + @внутренний_примитив ... +} +``` + +Аналогичная структура в XML: + +```xml +<примитив атрибут="значение1,значение2,..." атрибут2="значение3"> + <внутренний_примитив .../> + +``` + +В отличие от XML в корне может находиться несколько элементов. + +На данный момент существует два вида примитивов: box и rect, а также, part (описывает часть примитива, такую как, например, сторона куба). + +### Свойства `rect` + +- `from` - точка начала примитива. Пример: `from (0,0.5,0.125)` +- `right` - вектор X, также определяющий ширину примитива. Пример: `right (1,0,0)` +- `up` - вектор Y, также определяющий высоту примитива. Пример: `up (0,1,0)` +- `texture` - отображаемая текстура. По-умолчанию: `$0`. Пример: `texture "blocks:sand"` +- `region` - UV регион в границах выбранной текстуры, определяется позициями противоположных углов. Пример: `region (0,0,1,1)` +- `region-scale` вектор-множитель для автоматически выбранного UV региона. Пример: `region-scale (0.5,1)` +- `shading` определяет возможность затенения на примитиве. Пример: `shading off` +- `flip` отражает UV регион по горизонтали или вертикали. Пример: `flip v` + +### Свойства `box` + +- `from` - точка начала примитива. Пример: `from (0,0,0)` +- `to` - противоположная от начала точка. Пример: `to (1,1,1)` +- `texture` - отображаемая текстура для всех сторон по-умолчанию. +- `shading` определяет возможность затенения на примитиве. Пример: `shading off` +- `delete` удаляет стороны по именам (top, bottom, east, west, north, south) + +### Свойства `part` (в `box`) + +- `tags` - определяет то, на какаие из сторон будут применены свойства. Пример: `tags (top,bottom)` +- `texture` - отображаемая текстура. По-умолчанию: `$индекс_стороны`. +- `region` - UV регион в границах выбранной текстуры, определяется позициями противоположных углов. Пример: `region (0,0,1,1)` +- `region-scale` вектор-множитель для автоматически выбранного UV региона. Пример: `region-scale (0.5,1)`