diff --git a/doc/en/scripting/builtins/libpack.md b/doc/en/scripting/builtins/libpack.md index 2daab1269..651a030d2 100644 --- a/doc/en/scripting/builtins/libpack.md +++ b/doc/en/scripting/builtins/libpack.md @@ -78,14 +78,14 @@ Returns the id of all base packages (non-removeable) ```lua pack.get_info(packid: str) -> { - id: str, - title: str, - creator: str, - description: str, - version: str, - path: str, - icon: str, -- not available in headless mode - dependencies: optional strings array + id: str, + title: str, + creator: str, + description: str, + version: str, + path: str, + icon: str, -- not available in headless mode + dependencies: optional strings array } ``` @@ -95,6 +95,7 @@ Returns information about the pack (not necessarily installed). - `!` - required - `?` - optional - `~` - weak + for example `!teal` To obtain information about multiple packs, use table of ids to avoid re-scanning:one diff --git a/doc/en/xml-ui-layouts.md b/doc/en/xml-ui-layouts.md index 97b36d1f6..aeb71dd62 100644 --- a/doc/en/xml-ui-layouts.md +++ b/doc/en/xml-ui-layouts.md @@ -213,9 +213,6 @@ Element must be in direct sub-element of *inventory*. ## *slots-grid* - `start-index` - inventory slot index of the first slot. Type: integer -- `rows` - number of grid rows (unnecessary if *cols* and *count* specified). Type: integer -- `cols` - number of grid columns (unnecessary if *rows* and *count* specified). Type: integer -- `count` - total number of slots in grid (unnecessary if *rows* and *cols* specified). Type: integer - `interval` - visual slots interval. Type: number - `padding` - grid padding (not slots interval). Type: number. (*deprecated*) - `sharefunc` - Lua event called on LMB + Shift. Inventory id and slot index passed as arguments. @@ -223,3 +220,8 @@ Element must be in direct sub-element of *inventory*. - `onrightclick` - Lua event called on RMB click. Inventory id and slot index passed as arguments. - `taking` - the ability to take an item from a slot. - `placing` - the ability to put an item in a slot. + +Slots configuration (just specify two attributes): +- `rows` - ​​number of rows. Type: integer +- `cols` - number of columns. Type: integer +- `count` - total number of slots. Type: integer diff --git a/doc/ru/scripting/builtins/libmat4.md b/doc/ru/scripting/builtins/libmat4.md index 1531798a4..1b44df1ee 100644 --- a/doc/ru/scripting/builtins/libmat4.md +++ b/doc/ru/scripting/builtins/libmat4.md @@ -114,15 +114,29 @@ mat4.decompose(m: matrix) } или nil ``` -## Отслеживание точки *mat4.look_at(...)* +## Отслеживание точки - *mat4.look_at(...)* ```lua --- cоздает матрицу вида с точки 'eye' на точку 'center', где вектор 'up' определяет верх. +-- cоздаёт матрицу вида с точки 'eye' на точку 'center', где вектор 'up' определяет верх. mat4.look_at(eye: vec3, center: vec3, up: vec3) -- записывает матрицу вида в dst mat4.look_at(eye: vec3, center: vec3, up: vec3, dst: matrix) ``` +## Расчёт матрицы перспективы - *mat4.perspective* + +```lua +-- возвращает расчитанную матрицу перспективы. +-- параметр fov принимает значение вертикального поля зрения в градусах. +-- параметр ratio задаёт отношение сторон (сторона X к стороне Y, пример: для монитора 800:600 отношение сторон равно 4 к 3, или 4 / 3). +-- параметр near задаёт расстояние от камеры до плоскости Near. +-- параметр far задаёт расстояние от камеры до плоскости Far. +mat4.perspective(fov: number, ratio: number, near: number, far: number) -> mat4 + +-- расчитывает матрицу перспективы на основе переданных значений и записывает её в переменную dst. +mat4.perspective(fov: number, ratio: number, near: number, far: number, dst: mat4) -> nil +``` + ## Перевод в строку - *mat4.tostring(...)* ```lua diff --git a/doc/ru/scripting/builtins/libpack.md b/doc/ru/scripting/builtins/libpack.md index 0c4aac0c1..925cad7f8 100644 --- a/doc/ru/scripting/builtins/libpack.md +++ b/doc/ru/scripting/builtins/libpack.md @@ -82,6 +82,7 @@ pack.get_info(packid: string) -> { - `!` - required - `?` - optional - `~` - weak + например `!teal` Для получения информации о нескольких паках используйте таблицу id, чтобы не @@ -101,4 +102,4 @@ pack.assemble(packids: table) -> table pack.request_writeable(packid: string, callback: function(string)) ``` -Запрашивает у пользователя право на модификацию пака. При подтвержении новая точка входа будет передана в callback. \ No newline at end of file +Запрашивает у пользователя право на модификацию пака. При подтвержении новая точка входа будет передана в callback. diff --git a/doc/ru/scripting/builtins/libquat.md b/doc/ru/scripting/builtins/libquat.md index 5a6495658..e991de252 100644 --- a/doc/ru/scripting/builtins/libquat.md +++ b/doc/ru/scripting/builtins/libquat.md @@ -2,22 +2,34 @@ Библиотека для работы с кватернионами. -## Кватернион из матрицы - *mat4.from_quat(...)* +## Кватернион из матрицы - *quat.from_mat4(...)* ```lua --- создает кватернион на основе матрицы вращения +-- создаёт кватернион на основе матрицы вращения quat.from_mat4(m: matrix) -> quat -- записывает кватернион по матрице вращения в dst quat.from_mat4(m: matrix, dst: quat) ``` +## Кватернион из углов Эйлера - *quat.from_euler(...)* + +```lua +-- создаёт кватернион на основе вектора, содержащего углы Эйлера в порядке XYZ (pitch, yaw, roll) +-- (значения углов строго в градусах) +quat.from_euler(euler: vec3) -> quat + +-- записывает кватернион в dst на основе вектора, содержащего углы Эйлера в порядке XYZ (pitch, yaw, roll) +-- (значения углов строго в градусах) +quat.from_euler(euler: vec3, dst: quat) +``` + ## Сферическая линейная интерполяция - *quat.slerp(...)* Интерполяция всегда выполняется по короткому пути, а вращение выполняется с постоянной скоростью. ```lua --- создает кватернион как интерполяцию между a и b, +-- создаёт кватернион как интерполяцию между a и b, -- где t - фактор интерполяции quat.slerp(a: quat, b: quat, t: number) -> quat @@ -29,6 +41,6 @@ quat.slerp(a: quat, b: quat, t: number, dst: quat) ## Перевод в строку - *quat.tostring(...)* ```lua --- возвращает строку представляющую содержимое кватерниона +-- возвращает строку, представляющую содержимое кватерниона quat.tostring(q: quat) -> string ``` diff --git a/doc/ru/xml-ui-layouts.md b/doc/ru/xml-ui-layouts.md index aeb669b3f..2e93e6f0a 100644 --- a/doc/ru/xml-ui-layouts.md +++ b/doc/ru/xml-ui-layouts.md @@ -214,10 +214,8 @@ ## Сетка слотов - *slots-grid* Элемент должен находиться внутри `inventory` элемента, без посредников. + - `start-index` - индекс первого слота -- `rows` - число рядов (не указывается, если указано cols). -- `cols` - число столбцов (не указывается, если указано rows). -- `count` - общее число слотов (не указывается, если указаны rows и cols). - `interval` - интервал между слотами. Тип: число. - `padding` - отступ вокруг решетки слотов. Тип: число. (*атрибут будет удален*) - `sharefunc` - lua событие вызываемое при использовании ЛКМ + Shift. Передается id инвентаря и индекс слота @@ -225,3 +223,8 @@ - `onrightclick` - lua событие вызываемое при использовании ПКМ. Передается id инвентаря и индекс слота - `taking` - возможность взять предмет из слота. - `placing` - возможность положить предмет в слот. + +Конфигурация слотов (достаточно указать два атрибута): +- `rows` - число рядов. Тип: число. +- `cols` - число столбцов. Тип: число. +- `count` - общее число слотов. Тип: число. diff --git a/src/logic/EngineController.hpp b/src/logic/EngineController.hpp index a46973cf3..baba7ba9e 100644 --- a/src/logic/EngineController.hpp +++ b/src/logic/EngineController.hpp @@ -3,6 +3,7 @@ #include #include #include +#include class Engine; class World; diff --git a/src/logic/scripting/lua/libs/libmat4.cpp b/src/logic/scripting/lua/libs/libmat4.cpp index 081d99b5e..59f15e661 100644 --- a/src/logic/scripting/lua/libs/libmat4.cpp +++ b/src/logic/scripting/lua/libs/libmat4.cpp @@ -229,6 +229,20 @@ static int l_look_at(lua::State* L) { } } +static int l_perspective(lua::State *L) { + uint argc = lua::check_argc(L, 4, 5); + + double fov = glm::radians(lua::tonumber(L, 1)); + double ratio = lua::tonumber(L, 2); + double near = lua::tonumber(L, 3); + double far = lua::tonumber(L, 4); + + glm::mat4 mat = glm::perspective(fov, ratio, near, far); + + if (argc == 5) return lua::setmat4(L, 5, mat); + else return lua::pushmat4(L, mat); +} + static int l_from_quat(lua::State* L) { uint argc = lua::check_argc(L, 1, 2); auto quat = lua::toquat(L, 1); @@ -280,6 +294,7 @@ const luaL_Reg mat4lib[] = { {"determinant", lua::wrap}, {"decompose", lua::wrap}, {"look_at", lua::wrap}, + {"perspective", lua::wrap}, {"from_quat", lua::wrap}, {"tostring", lua::wrap}, {nullptr, nullptr} diff --git a/src/logic/scripting/lua/libs/libquat.cpp b/src/logic/scripting/lua/libs/libquat.cpp index 2316360a1..53757cb36 100644 --- a/src/logic/scripting/lua/libs/libquat.cpp +++ b/src/logic/scripting/lua/libs/libquat.cpp @@ -44,8 +44,17 @@ static int l_tostring(lua::State* L) { return lua::pushstring(L, ss.str()); } +static int l_from_euler(lua::State *L) { + uint argc = lua::check_argc(L, 1, 2); + glm::vec3 euler = glm::radians(lua::tovec3(L, 1)); + + if (argc == 2) return lua::setquat(L, 2, glm::quat(euler)); + return lua::pushquat(L, glm::quat(euler)); +} + const luaL_Reg quatlib[] = { {"from_mat4", lua::wrap}, + {"from_euler", lua::wrap}, {"slerp", lua::wrap}, {"tostring", lua::wrap}, {nullptr, nullptr}