diff --git a/doc/ru/scripting.md b/doc/ru/scripting.md index 6d2a0d53..a648678e 100644 --- a/doc/ru/scripting.md +++ b/doc/ru/scripting.md @@ -383,41 +383,37 @@ block.defs_count() -> int Возвращает количество id доступных в движке блоков -Следующие три функции используется для учёта вращения блока при обращении к соседним блокам или других целей, где направление блока имеет решающее значение. - - ```python +block.get_picking_item(id: int) -> int +``` + +Возвращает числовой id предмета, указанного в свойстве *picking-item*. + +### Вращение + +Следующие функции используется для учёта вращения блока при обращении к соседним блокам или других целей, где направление блока имеет решающее значение. + + +```lua +-- Возвращает целочисленный единичный вектор X блока на указанных координатах с учётом его вращения (три целых числа). +-- Если поворот отсутствует, возвращает 1, 0, 0 block.get_X(x: int, y: int, z: int) -> int, int, int -``` -Возвращает целочисленный единичный вектор X блока на указанных координатах с учётом его вращения (три целых числа). -Если поворот отсутствует, возвращает 1, 0, 0 - -```python +-- То же, но для оси Y (по-умолчанию 0, 1, 0) block.get_Y(x: int, y: int, z: int) -> int, int, int -``` -Возвращает целочисленный единичный вектор Y блока на указанных координатах с учётом его вращения (три целых числа). -Если поворот отсутствует, возвращает 0, 1, 0 - -```python +-- То же, но для оси Z (по-умолчанию 0, 0, 1) block.get_Z(x: int, y: int, z: int) -> int, int, int -``` -Возвращает целочисленный единичный вектор Z блока на указанных координатах с учётом его вращения (три целых числа). -Если поворот отсутствует, возвращает 0, 0, 1 - -```python +-- Возвращает индекс поворота блока в его профиле вращения (не превышает 7). block.get_rotation(x: int, y: int, z: int) -> int -``` -Возвращает индекс поворота блока в его профиле вращения. - -```python +-- Устанавливает вращение блока по индексу в его профиле вращения. block.set_rotation(x: int, y: int, z: int, rotation: int) -``` -Устанавливает вращение блока по индексу в его профиле вращения. +-- Возвращает имя профиля вращения (none/pane/pipe) +block.get_rotation_profile(id: int) -> str +``` ### Расширенные блоки @@ -463,6 +459,30 @@ block.set_user_bits(x: int, y: int, z: int, offset: int, bits: int, value: int) ``` Записывает указанное число бит значения value в user bits по выбранному смещению +### Физика + +Информация свойствах блока, используемых физическим движком. + +```lua +-- Возвращает массив из двух векторов (массивов из 3 чисел): +-- 1. Минимальная точка хитбокса +-- 2. Размер хитбокса +-- rotation_index - индекс поворота блока +block.get_hitbox(id: int, rotation_index: int) -> {vec3, vec3} +``` + +### Модель + +Информация о модели блока. + +```lua +-- возвращает тип модели блока (block/aabb/custom/...) +block.get_model(id: int) -> str + +-- возвращает массив из 6 текстур, назначенных на стороны блока +block.get_textures(id: int) -> таблица строк +``` + ## Библиотека item ```python diff --git a/src/logic/scripting/lua/libblock.cpp b/src/logic/scripting/lua/libblock.cpp index 09eddbb7..40fda814 100644 --- a/src/logic/scripting/lua/libblock.cpp +++ b/src/logic/scripting/lua/libblock.cpp @@ -300,6 +300,13 @@ static int l_get_rotation_profile(lua::State* L) { return 0; } +static int l_get_picking_item(lua::State* L) { + if (auto def = require_block(L)) { + return lua::pushinteger(L, def->rt.pickingItem); + } + return 0; +} + const luaL_Reg blocklib [] = { {"index", lua::wrap}, {"name", lua::wrap}, @@ -327,5 +334,6 @@ const luaL_Reg blocklib [] = { {"get_model", lua::wrap}, {"get_hitbox", lua::wrap}, {"get_rotation_profile", lua::wrap}, + {"get_picking_item", lua::wrap}, {NULL, NULL} };