From 6ec33ab98c78523eaececf40f113f2323d25a33a Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 14:14:19 +0300 Subject: [PATCH 1/8] fix stdlib.lua --- res/scripts/stdlib.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/scripts/stdlib.lua b/res/scripts/stdlib.lua index 2c48bdfc..9cf23cc3 100644 --- a/res/scripts/stdlib.lua +++ b/res/scripts/stdlib.lua @@ -248,7 +248,7 @@ function _rules.create(name, value, handler) end if _rules.get(name) == nil then _rules.set(name, value) - else + elseif handler then handler(_rules.get(name)) end return handlerid @@ -265,11 +265,11 @@ end function _rules.clear() _rules.rules = {} _rules.nextid = 1 - - _rules.create("allow-cheats", true) end function __vc_on_hud_open() + _rules.create("allow-cheats", true) + _rules.create("allow-content-access", hud._is_content_access(), function(value) hud._set_content_access(value) input.set_enabled("player.pick", value) From bcf920a251371735f2e408264b4837f5b0d5bde9 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 14:16:58 +0300 Subject: [PATCH 2/8] add xray_opacity support to projected 3d text --- src/graphics/render/TextsRenderer.cpp | 42 +++++++++++++++------------ 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/graphics/render/TextsRenderer.cpp b/src/graphics/render/TextsRenderer.cpp index 676ca349..ea9a69e4 100644 --- a/src/graphics/render/TextsRenderer.cpp +++ b/src/graphics/render/TextsRenderer.cpp @@ -34,12 +34,11 @@ void TextsRenderer::renderNote( util::sqr(preset.renderDistance / camera.zoom)) { return; } - // Projected notes are displayed on the front layer only if ((preset.displayMode == NoteDisplayMode::PROJECTED) != projected) { return; } float opacity = 1.0f; - if (frontLayer && preset.displayMode != NoteDisplayMode::PROJECTED) { + if (frontLayer) { if (preset.xrayOpacity <= 0.0001f) { return; } @@ -81,15 +80,25 @@ void TextsRenderer::renderNote( scale = scale2 * preset.perspective + scale * (1.0f - preset.perspective); } - auto projpos = camera.getProjView() * glm::vec4(pos, 1.0f); - pos = projpos; - if (pos.z < 0.0f) { - return; + if (frontLayer) { + auto projpos = camera.getProjView() * glm::vec4(pos, 1.0f); + pos = projpos; + if (pos.z < 0.0f) { + return; + } + pos /= projpos.w; + pos.z = 0; + xvec = {2.0f/Window::width*scale, 0, 0}; + yvec = {0, 2.0f/Window::height*scale, 0}; + } else { + auto matrix = camera.getProjView(); + auto screenPos = matrix * glm::vec4(pos, 1.0f); + + xvec = glm::vec3(2.0f/Window::width*scale, 0, 0); + yvec = glm::vec3(0, 2.0f/Window::height*scale, 0); + + pos = screenPos / screenPos.w; } - pos /= pos.z; - pos.z = 0; - xvec = {2.0f/Window::width*scale, 0, 0}; - yvec = {0, 2.0f/Window::height*scale, 0}; } auto color = preset.color; batch.setColor(glm::vec4(color.r, color.g, color.b, color.a * opacity)); @@ -119,16 +128,11 @@ void TextsRenderer::render( renderNote(*note, context, camera, settings, hudVisible, frontLayer, false); } batch.flush(); - if (frontLayer) { - shader.uniformMatrix( - "u_projview", - glm::mat4(1.0f) - ); - for (const auto& [_, note] : notes) { - renderNote(*note, context, camera, settings, hudVisible, true, true); - } - batch.flush(); + shader.uniformMatrix("u_projview", glm::mat4(1.0f)); + for (const auto& [_, note] : notes) { + renderNote(*note, context, camera, settings, hudVisible, frontLayer, true); } + batch.flush(); } u64id_t TextsRenderer::add(std::unique_ptr note) { From 89578ff257ac95c7dd848689c2fb31b2fa2213e2 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 14:56:06 +0300 Subject: [PATCH 3/8] add json and toml libraries docs reference to scripting.md --- doc/en/scripting.md | 1 + doc/ru/scripting.md | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 7f5f3dda..6d9cc0a1 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -17,6 +17,7 @@ Subsections: - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) - [item](scripting/builtins/libitem.md) + - [json, toml](scripting/filesystem.md) - [mat4](scripting/builtins/libmat4.md) - [pack](scripting/builtins/libpack.md) - [player](scripting/builtins/libplayer.md) diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 6f092570..0cc3eb97 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -17,6 +17,7 @@ - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) - [item](scripting/builtins/libitem.md) + - [json, toml](scripting/filesystem.md) - [mat4](scripting/builtins/libmat4.md) - [pack](scripting/builtins/libpack.md) - [player](scripting/builtins/libplayer.md) From 8c0d3605438d2f03734923418f9007dbc9b60c41 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 15:11:17 +0300 Subject: [PATCH 4/8] add doc/*/scripting/builtins/libbase64.md --- doc/en/scripting.md | 3 ++- doc/en/scripting/builtins/libbase64.md | 11 +++++++++++ doc/ru/scripting.md | 3 ++- doc/ru/scripting/builtins/libbase64.md | 11 +++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 doc/en/scripting/builtins/libbase64.md create mode 100644 doc/ru/scripting/builtins/libbase64.md diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 6d9cc0a1..7f0ede5b 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -9,6 +9,8 @@ Subsections: - [UI properties and methods](scripting/ui.md) - [Entities and components](scripting/ecs.md) - [Libraries](#) + - [base64](scripting/builtins/libbase64.md) + - [bjson, json, toml](scripting/filesystem.md) - [block](scripting/builtins/libblock.md) - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) @@ -17,7 +19,6 @@ Subsections: - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) - [item](scripting/builtins/libitem.md) - - [json, toml](scripting/filesystem.md) - [mat4](scripting/builtins/libmat4.md) - [pack](scripting/builtins/libpack.md) - [player](scripting/builtins/libplayer.md) diff --git a/doc/en/scripting/builtins/libbase64.md b/doc/en/scripting/builtins/libbase64.md new file mode 100644 index 00000000..fdfd467e --- /dev/null +++ b/doc/en/scripting/builtins/libbase64.md @@ -0,0 +1,11 @@ +# *base64* library + +Library for base64 encoding/decoding. + +```lua +-- Encode bytes to base64 string +base64.encode(bytes: table|ByteArray) -> str + +-- Decode base64 string to ByteArray or lua table if second argument is set to true +base64.decode(base64string: str, [optional]usetable: bool=false) -> table|ByteArray +``` diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 0cc3eb97..47dcb07e 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -9,6 +9,8 @@ - [Свойства и методы UI элементов](scripting/ui.md) - [Сущности и компоненты](scripting/ecs.md) - [Библиотеки](#) + - [base64](scripting/builtins/libbase64.md) + - [bjson, json, toml](scripting/filesystem.md) - [block](scripting/builtins/libblock.md) - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) @@ -17,7 +19,6 @@ - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) - [item](scripting/builtins/libitem.md) - - [json, toml](scripting/filesystem.md) - [mat4](scripting/builtins/libmat4.md) - [pack](scripting/builtins/libpack.md) - [player](scripting/builtins/libplayer.md) diff --git a/doc/ru/scripting/builtins/libbase64.md b/doc/ru/scripting/builtins/libbase64.md new file mode 100644 index 00000000..77e877bb --- /dev/null +++ b/doc/ru/scripting/builtins/libbase64.md @@ -0,0 +1,11 @@ +# Библиотека *base64* + +Библиотека для base64 кодирования/декодирования. + +```lua +-- Кодирует массив байт в base64 строку +base64.encode(bytes: table|ByteArray) -> str + +-- Декодирует base64 строку в ByteArray или таблицу чисел, если второй аргумент установлен на true +base64.decode(base64string: str, [optional]usetable: bool=false) -> table|ByteArray +``` From c8a08628be98add14d884e26fd024e06eafad866 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 15:23:52 +0300 Subject: [PATCH 5/8] add gfx.particles docs reference to scripting.md --- doc/en/scripting.md | 1 + doc/ru/scripting.md | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 7f0ede5b..8c46d2eb 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -15,6 +15,7 @@ Subsections: - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) - [file](scripting/builtins/libfile.md) + - [gfx.particles](particles.md) - [gui](scripting/builtins/libgui.md) - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 47dcb07e..5b449afc 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -15,6 +15,7 @@ - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) - [file](scripting/builtins/libfile.md) + - [gfx.particles](particles.md) - [gui](scripting/builtins/libgui.md) - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) From 9ac22f86e1c167f47cb6c3d37db0cdaf6d808e86 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 16:20:07 +0300 Subject: [PATCH 6/8] update default 3d text 'perspective' value --- res/presets/text3d/player_name.toml | 1 + src/presets/NotePreset.hpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/res/presets/text3d/player_name.toml b/res/presets/text3d/player_name.toml index 7942ff48..8946128c 100644 --- a/res/presets/text3d/player_name.toml +++ b/res/presets/text3d/player_name.toml @@ -1,3 +1,4 @@ display = "projected" xray_opacity = 0.3 render_distance = 128 +perspective = 0.0 diff --git a/src/presets/NotePreset.hpp b/src/presets/NotePreset.hpp index c2a1a88b..6c3f548e 100644 --- a/src/presets/NotePreset.hpp +++ b/src/presets/NotePreset.hpp @@ -20,9 +20,9 @@ struct NotePreset : public Serializable { NoteDisplayMode displayMode = NoteDisplayMode::STATIC_BILLBOARD; glm::vec4 color {1.0f}; float scale = 1.0f; - float renderDistance = 10.0f; + float renderDistance = 32.0f; float xrayOpacity = 0.0f; - float perspective = 0.0f; + float perspective = 1.0f; dv::value serialize() const override; void deserialize(const dv::value& src) override; From 72ae0d5d55df34932576313b17d8fcec26abc279 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 16:22:08 +0300 Subject: [PATCH 7/8] add doc/ru/3d-text.md --- doc/en/scripting.md | 2 +- doc/ru/3d-text.md | 86 ++++++++++++++++++++++++++ doc/ru/scripting.md | 3 +- doc/ru/scripting/builtins/libbase64.md | 2 +- 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 doc/ru/3d-text.md diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 8c46d2eb..9a39c504 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -15,7 +15,7 @@ Subsections: - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) - [file](scripting/builtins/libfile.md) - - [gfx.particles](particles.md) + - [gfx.particles](particles.md#gfxparticles-library) - [gui](scripting/builtins/libgui.md) - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) diff --git a/doc/ru/3d-text.md b/doc/ru/3d-text.md new file mode 100644 index 00000000..db5fdfd3 --- /dev/null +++ b/doc/ru/3d-text.md @@ -0,0 +1,86 @@ +# 3D Текст + +2D текст отображаемый в 3D пространстве. + +Вид 3D текста, как и [частицы](particles.md), настраивается через таблицу, все поля которой опциональны. + +| Поле | Описание | По-умолчанию | +| --------------- | ------------------------------------------------------- | ----------------- | +| display | Формат отображения | static_billboard | +| color | Цвет текста | {1, 1, 1, 1} | +| scale | Масштаб | 1 | +| renderDistance | Дистанция отрисовки текста | 32 | +| xray_opacity | Коэффициент видимости через препятствия (просвечивание) | 0 | +| perspective | Коэффициент перспективы | 1 | + +Доступные форматы отображения: + +| Формат | Описание | +| ----------------- | ----------------------------------------------------------------- | +| static_billboard | Простой 3D текст в мире с ручным управлением размером и вращением | +| y_free_billboard | Свободно вращающийся по оси Y текст, направляющийся на камеру | +| xy_free_billboard | Свободно вращающийся текст, направляющийся на камеру | +| projected | Проецируемый текст (отображается в экранной системе координат) | + +## Библиотека *gfx.text3d* + +```lua +gfx.text3d.show( + -- позиция текста + position: vec3, + -- отображаемый текст + text: str, + -- таблица настроек частиц + preset: table, + -- дополнительная таблица настроек частиц + [опционально] extension: table +) -> int +``` + +Создаёт 3D текст, возвращая его id. + +```lua +gfx.text3d.hide(id: int) +``` + +Удаляет 3D текст. + +```lua +gfx.text3d.get_text(id: int) -> str +gfx.text3d.set_text(id: int, text: str) +``` + +Геттер и сеттер текста. + +```lua +gfx.text3d.get_pos(id: int) -> vec3 +gfx.text3d.set_pos(id: int, pos: vec3) +``` + +Геттер и сеттер позиции текста. + +```lua +gfx.text3d.get_axis_x(id: int) -> vec3 +gfx.text3d.set_axis_x(id: int, pos: vec3) +``` + +Геттер и сеттер вектора X. + +```lua +gfx.text3d.get_axis_y(id: int) -> vec3 +gfx.text3d.set_axis_y(id: int, pos: vec3) +``` + +Геттер и сеттер вектора Y. + +```lua +gfx.text3d.set_rotation(id: int, rotation: mat4) +``` + +Устанавливает вращение текста (Устанавливает повернутые вектора X,Y). + +```lua +gfx.text3d.update_settings(id: int, preset: table) +``` + +Обновляет настройки отображения текста. diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 5b449afc..19f4570a 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -15,7 +15,8 @@ - [cameras](scripting/builtins/libcameras.md) - [entities](scripting/builtins/libentities.md) - [file](scripting/builtins/libfile.md) - - [gfx.particles](particles.md) + - [gfx.particles](particles.md#библиотека-gfxparticles) + - [gfx.text3d](3d-text.md#библиотека-gfxtext3d) - [gui](scripting/builtins/libgui.md) - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) diff --git a/doc/ru/scripting/builtins/libbase64.md b/doc/ru/scripting/builtins/libbase64.md index 77e877bb..7078fa0b 100644 --- a/doc/ru/scripting/builtins/libbase64.md +++ b/doc/ru/scripting/builtins/libbase64.md @@ -7,5 +7,5 @@ base64.encode(bytes: table|ByteArray) -> str -- Декодирует base64 строку в ByteArray или таблицу чисел, если второй аргумент установлен на true -base64.decode(base64string: str, [optional]usetable: bool=false) -> table|ByteArray +base64.decode(base64string: str, [опционально]usetable: bool=false) -> table|ByteArray ``` From 761a19a96094fcf683d31352f2fdd1b3d367829f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 16:36:47 +0300 Subject: [PATCH 8/8] add doc/en/3d-text.md --- doc/en/3d-text.md | 86 +++++++++++++++++++++++++++++++++++++++++++++ doc/en/scripting.md | 1 + doc/ru/3d-text.md | 4 +-- 3 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 doc/en/3d-text.md diff --git a/doc/en/3d-text.md b/doc/en/3d-text.md new file mode 100644 index 00000000..3f3dc7f1 --- /dev/null +++ b/doc/en/3d-text.md @@ -0,0 +1,86 @@ +# 3D Text + +2D text displayed in 3D space. + +The appearance of 3D text, is configured via a table, like [particles](particles.md). All fields are optional. + +| Field | Description | Default | +| -------------- | ---------------------------- | ---------------- | +| display | Display format | static_billboard | +| color | Text color | {1, 1, 1, 1} | +| scale | Text scale | 1 | +| renderDistance | Text rendering distance | 32 | +| xray_opacity | Visibility through obstacles | 0 | +| perspective | Perspective coefficient | 1 | + +Available display formats: + +| Format | Description | +| ----------------- | ----------------------------------------------------------------- | +| static_billboard | Simple 3D text in the world with manual size and rotation control | +| y_free_billboard | Freely rotating text on the Y axis facing the camera | +| xy_free_billboard | Freely rotating text facing the camera | +| projected | Projected text (displayed in screen coordinates) | + +## *gfx.text3d* library + +```lua +gfx.text3d.show( + -- text position + position: vec3, + -- text to display + text: str, + -- text display settings table + preset: table, + -- additional text display settings table + [optional] extension: table +) -> int +``` + +Creates 3D text, returning its id. + +```lua +gfx.text3d.hide(id: int) +``` + +Removes 3D text. + +```lua +gfx.text3d.get_text(id: int) -> str +gfx.text3d.set_text(id: int, text: str) +``` + +Text getter and setter. + +```lua +gfx.text3d.get_pos(id: int) -> vec3 +gfx.text3d.set_pos(id: int, pos: vec3) +``` + +Text position getter and setter. + +```lua +gfx.text3d.get_axis_x(id: int) -> vec3 +gfx.text3d.set_axis_x(id: int, pos: vec3) +``` + +Getter and setter of vector X. + +```lua +gfx.text3d.get_axis_y(id: int) -> vec3 +gfx.text3d.set_axis_y(id: int, pos: vec3) +``` + +Getter and setter of vector Y. + +```lua +gfx.text3d.set_rotation(id: int, rotation: mat4) +``` + +Sets the text rotation (Sets the rotated vectors X,Y). + +```lua +gfx.text3d.update_settings(id: int, preset: table) +``` + +Updates text display settings. diff --git a/doc/en/scripting.md b/doc/en/scripting.md index 9a39c504..6b33f7d9 100644 --- a/doc/en/scripting.md +++ b/doc/en/scripting.md @@ -16,6 +16,7 @@ Subsections: - [entities](scripting/builtins/libentities.md) - [file](scripting/builtins/libfile.md) - [gfx.particles](particles.md#gfxparticles-library) + - [gfx.text3d](3d-text.md#gfxtext3d-library) - [gui](scripting/builtins/libgui.md) - [hud](scripting/builtins/libhud.md) - [inventory](scripting/builtins/libinventory.md) diff --git a/doc/ru/3d-text.md b/doc/ru/3d-text.md index db5fdfd3..ac6affd3 100644 --- a/doc/ru/3d-text.md +++ b/doc/ru/3d-text.md @@ -30,9 +30,9 @@ gfx.text3d.show( position: vec3, -- отображаемый текст text: str, - -- таблица настроек частиц + -- таблица настроек отображение текста preset: table, - -- дополнительная таблица настроек частиц + -- дополнительная таблица настроек отображения текста [опционально] extension: table ) -> int ```