Merge branch 'main' of https://github.com/MihailRis/VoxelEngine-Cpp
This commit is contained in:
@@ -26,14 +26,31 @@
|
||||
|
||||
# Общие атрибуты элементов
|
||||
|
||||
- `enabled` - при значении false блокирует элемент, в отличие от interactive, обозначая это состояние визуально.
|
||||
- `id` - идентификатор элемента. Тип: строка.
|
||||
- `pos` - позиция элемента. Тип: 2D вектор.
|
||||
- `size` - размер элемента. Тип: 2D вектор.
|
||||
- `context` - указывает контекст перевода для `@`-строк.
|
||||
- `color` - цвет элемента. Тип: RGBA цвет.
|
||||
- `hover-color` - цвет элемента при наведении курсора. Тип: RGBA цвет.
|
||||
- `pressed-color` - цвет элемента при нажатии на элемент. Тип: RGBA цвет.
|
||||
- `margin` - внешний отступ элемента. Тип: 4D вектор.
|
||||
Порядок: `"left,top,right,bottom"`
|
||||
- `visible` - видимость элемента. Тип: логический ("true"/"false").
|
||||
- `position-func` - поставщик позиции элемента (два числа), вызываемый при изменении размера контейнера, в котором находится элемент, либо при добавлении элемента в контейнер. Может быть вызван до вызова on_hud_open.
|
||||
- `size-func` - поставщик размера элемента (два числа), вызываемый при изменении размера контейнера, в котором находится элемент, либо при добавлении элемента в контейнер. Может быть вызван до вызова on_hud_open.
|
||||
- `onclick` - lua функция вызываемая при нажатии на элемент.
|
||||
- `ondoubleclick` - lua функция вызываемая при двойном нажатии на элемент.
|
||||
- `tooltip` - текст всплывающей подсказки
|
||||
- `tooltip-delay` - задержка появления всплывающей подсказки
|
||||
- `gravity` - автоматическое позиционирование элемента в контейнере. (Не работает в автоматических контейнерах, как panel). Значения: *top-left, top-center, top-right, center-left, center-center, center-right, bottom-left, bottom-center, bottom-right*.
|
||||
- `z-index` - определяет порядок элементов, при большем значении будет перекрывать элементы с меньшим.
|
||||
- `interactive` - при значении false наведение на элемент и все под-элементы будет игнорироваться.
|
||||
|
||||
# Атрибуты шаблонов
|
||||
|
||||
- `if` при значениях ('', 'false', 'nil') элемент будет проигнорирован, включая под-элементы.
|
||||
- `ifnot` то же, что и `if`, но с обратным условием.
|
||||
|
||||
# Общие атрибуты контейнеров
|
||||
|
||||
@@ -46,47 +63,69 @@
|
||||
|
||||
В число панелей также входят кнопки.
|
||||
- `max-length` - максимальная длина, на которую растягивается панель до начала скроллинга (если scrollable = true). Тип: число
|
||||
- `orientation` - ориентация панели: horizontal/vertical.
|
||||
|
||||
# Основные элементы
|
||||
|
||||
## Кнопка `button`
|
||||
## Кнопка - *button*
|
||||
|
||||
Внутренний текст - текст кнопки.
|
||||
|
||||
- `text-align` - выравнивание текста ("left", "center" или "right"). Тип: строка.
|
||||
- `onclick` - lua функция вызываемая при нажатии на кнопку.
|
||||
|
||||
## Изображение `image`
|
||||
## Флажок - *checkbox*
|
||||
|
||||
- `checked` - определяет состояние отметки.
|
||||
- `supplier` - поставщик состояния отметки (вызывается каждый кадр)
|
||||
- `consumer` - lua функция-приемник состояния отметки. Вызывается только при завершении ввода
|
||||
## Метка - *label*
|
||||
|
||||
- `valign` - вертикальное выравнивание текста: top/center/bottom
|
||||
- `supplier` - поставщик текста (вызывается каждый кадр)
|
||||
- `autoresize` - автоматическое изменение размера элемента (по-умолчанию - false). Не влияет на размер шрифта.
|
||||
- `multiline` - разрешает отображение многострочного текста.
|
||||
- `text-wrap` - разрешает автоматический перенос текста (работает только при multiline: "true")
|
||||
|
||||
## Изображение - *image*
|
||||
|
||||
- `src` - имя изображения в папке textures без указания расширения. Тип: строка. Например `gui/error`
|
||||
|
||||
# Текстовое поле `textbox`
|
||||
## Текстовое поле - *textbox*
|
||||
|
||||
Внутренний текст - изначально введенный текст
|
||||
|
||||
- `placeholder` - текст подстановки (используется текстовое поле пусто)
|
||||
- `supplier` - поставщик текста (вызывается каждый кадр)
|
||||
- `consumer` - lua функция-приемник введенного текста. Вызывается только при завершении ввода
|
||||
|
||||
## Ползунок `trackbar`
|
||||
- `autoresize` - автоматическое изменение размера элемента (по-умолчанию - false). Не влияет на размер шрифта.
|
||||
- `multiline` - разрешает отображение многострочного текста.
|
||||
- `text-wrap` - разрешает автоматический перенос текста (работает только при multiline: "true")
|
||||
- `editable`- определяет возможность редактирования текста.
|
||||
- `error-color` - цвет при вводе некорректных данных (текст не проходит проверку валидатора). Тип: RGBA цвет.
|
||||
- `validator` - lua функция, проверяющая текст на корректность. Принимает на вход строку, возвращает true если текст корректен.
|
||||
- `onup` - lua функция вызываемая при нажатии стрелки вверх.
|
||||
- `ondown` - lua функция вызываемая при нажатии стрелки вниз.
|
||||
## Ползунок - *trackbar*
|
||||
|
||||
- `min` - минимальное значение. Тип: число. По-умолчанию: 0
|
||||
- `max` - максимальное значение. Тип: число. По-умолчанию: 1
|
||||
- `value` - изначальное значение. Тип: число. По-умолчанию: 0
|
||||
- `step` - размер деления ползунка. Тип: число. По-умолчанию: 1
|
||||
- `track-width` - ширина указателя (в делениях). Тип: число. По-умолчанию: 1
|
||||
- `track-width` - ширина указателя (в пикселях). Тип: число. По-умолчанию: 12
|
||||
- `track-color` - цвет указателя при наведении курсора. Тип: RGBA цвет.
|
||||
- `consumer` - lua функция-приемник установленного значения
|
||||
- `supplier` - lua функция-поставщик значения
|
||||
|
||||
# Элементы инвентаря
|
||||
|
||||
## Инвентарь `inventory`
|
||||
## Инвентарь - *inventory*
|
||||
|
||||
Элемент является контейнером. На данный момент не имеет специфических атрибутов.
|
||||
|
||||
> [!WARNING]
|
||||
> Расположение инвентарей управляется движком и не может быть изменено свойствами pos, margin и т.д.
|
||||
|
||||
## Одиночный слот `slot`
|
||||
## Одиночный слот - *slot*
|
||||
|
||||
Элемент должен находиться внутри `inventory` элемента, без посредников.
|
||||
- `index` - индекс слота инвентаря. (Нумерация с 0)
|
||||
@@ -95,7 +134,7 @@
|
||||
- `updatefunc` - lua событие вызываемое при изменении содержимого слота
|
||||
- `onrightclick` - lua событие вызываемое при использовании ПКМ. Передается id инвентаря и индекс слота
|
||||
|
||||
## Решетка слотов `slots-grid`
|
||||
## Сетка слотов - *slots-grid*
|
||||
|
||||
Элемент должен находиться внутри `inventory` элемента, без посредников.
|
||||
- `start-index` - индекс первого слота
|
||||
|
||||
+120
-213
@@ -2,11 +2,7 @@
|
||||
|
||||
В качестве языка сценариев используется LuaJIT
|
||||
|
||||
## Функции, доступные в скриптах
|
||||
|
||||
```lua
|
||||
load_script("контентпак:scripts/имя_скрипта.lua") -- загружает скрипт, если ещё не загружен
|
||||
load_script("контентпак:scripts/имя_скрипта.lua", true) -- перезагружает скрипт
|
||||
require "контентпак:имя_модуля" -- загружает lua модуль из папки modules (расширение не указывается)
|
||||
```
|
||||
|
||||
@@ -46,10 +42,10 @@ player.set_pos(playerid: int, x: number, y: number, z: number)
|
||||
Устанавливает x, y, z координаты игрока
|
||||
|
||||
```python
|
||||
player.get_rot(playerid: int) -> number, number
|
||||
player.get_rot(playerid: int) -> number, number, number
|
||||
```
|
||||
|
||||
Возвращает x, y вращения камеры (в радианах)
|
||||
Возвращает x, y, z вращения камеры (в радианах)
|
||||
|
||||
```python
|
||||
player.set_rot(playerid: int, x: number, y: number, z: number)
|
||||
@@ -63,8 +59,37 @@ player.get_inventory(playerid: int) -> int, int
|
||||
|
||||
Возвращает id инвентаря игрока и индекс выбранного слота (от 0 до 9)
|
||||
|
||||
```python
|
||||
player.is_flight() -> bool
|
||||
player.set_flight(bool)
|
||||
```
|
||||
|
||||
Геттер и сеттер режима полета
|
||||
|
||||
```python
|
||||
player.is_noclip() -> bool
|
||||
player.set_noclip(bool)
|
||||
```
|
||||
|
||||
Геттер и сеттер noclip режима (выключенная коллизия игрока)
|
||||
|
||||
```python
|
||||
player.get_selected_block(playerid: int) -> x,y,z
|
||||
```
|
||||
|
||||
Возвращает координаты выделенного блока, либо nil
|
||||
|
||||
## Библиотека world
|
||||
|
||||
```python
|
||||
world.get_list() -> массив таблиц {
|
||||
name: str,
|
||||
icon: str
|
||||
}
|
||||
```
|
||||
|
||||
Возвращает информацию о мирах: название и предпросмотр (автоматически загружаемая текстура).
|
||||
|
||||
```python
|
||||
world.get_day_time() -> number
|
||||
```
|
||||
@@ -89,6 +114,12 @@ world.get_seed() -> int
|
||||
|
||||
Возвращает зерно мира.
|
||||
|
||||
```python
|
||||
world.exists() -> bool
|
||||
```
|
||||
|
||||
Проверяет существование мира по имени.
|
||||
|
||||
## Библиотека pack
|
||||
|
||||
```python
|
||||
@@ -109,6 +140,38 @@ pack.get_installed() -> массив строк
|
||||
|
||||
Возращает id всех установленных в мире контент-паков
|
||||
|
||||
```python
|
||||
pack.get_available() -> массив строк
|
||||
```
|
||||
|
||||
Возвращает id всех доступных, но не установленных в мире контент-паков
|
||||
|
||||
```python
|
||||
pack.get_base_packs() -> массив строк
|
||||
```
|
||||
|
||||
Возвращает id всех базовых паков (неудаляемых)
|
||||
|
||||
```python
|
||||
pack.get_info(packid: str) -> {
|
||||
id: str,
|
||||
title: str,
|
||||
creator: str,
|
||||
description: str,
|
||||
version: str,
|
||||
icon: str,
|
||||
dependencies: опциональный массив строк
|
||||
}
|
||||
```
|
||||
|
||||
Возвращает информацию о паке (не обязательно установленном).
|
||||
- icon - название текстуры предпросмотра (загружается автоматически)
|
||||
- dependencies - строки в формате `{lvl}{id}`, где lvl:
|
||||
- `!` - required
|
||||
- `?` - optional
|
||||
- `~` - weak
|
||||
например `!teal`
|
||||
|
||||
## Библиотека gui
|
||||
|
||||
Библиотека содержит функции для доступа к свойствам UI элементов. Вместо gui следует использовать объектную обертку, предоставляющую доступ к свойствам через мета-методы __index, __newindex:
|
||||
@@ -120,6 +183,33 @@ indentory_doc.some_button.text = "new text"
|
||||
|
||||
В скрипте макета `layouts/файл_макета.xml` - `layouts/файл_макета.xml.lua` уже доступна переменная **document** содержащая объект класса Document
|
||||
|
||||
```python
|
||||
gui.str(text: str, context: str) -> str
|
||||
```
|
||||
|
||||
Возращает переведенный текст.
|
||||
|
||||
```python
|
||||
gui.get_viewport() -> {int, int}
|
||||
```
|
||||
|
||||
Возвращает размер главного контейнера (окна).
|
||||
|
||||
```python
|
||||
gui.get_env(document: str) -> table
|
||||
```
|
||||
|
||||
Возвращает окружение (таблица глобальных переменных) указанного документа.
|
||||
|
||||
```python
|
||||
get_locales_info() -> таблица таблиц где
|
||||
ключ - id локали в формате isolangcode_ISOCOUNTRYCODE
|
||||
значение - таблица {
|
||||
name: str # название локали на её языке
|
||||
}
|
||||
```
|
||||
|
||||
Возвращает информацию о всех загруженных локалях (res/texts/\*).
|
||||
## Библиотека inventory
|
||||
|
||||
Библиотека функций для работы с инвентарем.
|
||||
@@ -197,6 +287,18 @@ block.index(name: str) -> int
|
||||
|
||||
Возвращает числовой id блока, принимая в качестве агрумента строковый
|
||||
|
||||
```python
|
||||
block.material(blockid: int) -> str
|
||||
```
|
||||
|
||||
Возвращает id материала блока.
|
||||
|
||||
```python
|
||||
block.caption(blockid: int) -> str
|
||||
```
|
||||
|
||||
Возвращает название блока, отображаемое в интерфейсе.
|
||||
|
||||
```python
|
||||
block.get(x: int, y: int, z: int) -> int
|
||||
```
|
||||
@@ -359,206 +461,27 @@ hud.close(layoutid: str)
|
||||
hud.get_block_inventory() -> int
|
||||
```
|
||||
|
||||
Получить ID инвентаря открытого блока или 0
|
||||
|
||||
## События блоков
|
||||
|
||||
```lua
|
||||
function on_placed(x, y, z, playerid)
|
||||
```
|
||||
|
||||
Вызывается после установки блока игроком
|
||||
|
||||
```lua
|
||||
function on_broken(x, y, z, playerid)
|
||||
```
|
||||
|
||||
Вызывается после разрушения блока игроком
|
||||
|
||||
```lua
|
||||
function on_interact(x, y, z, playerid) -> bool
|
||||
```
|
||||
|
||||
Вызывается при нажатии на блок ПКМ. Предотвращает установку блоков, если возвращает `true`
|
||||
|
||||
```lua
|
||||
function on_update(x, y, z)
|
||||
```
|
||||
|
||||
Вызывается при обновлении блока (если изменился соседний блок)
|
||||
|
||||
```lua
|
||||
function on_random_update(x, y, z)
|
||||
```
|
||||
|
||||
Вызывается в случайные моменты времени (рост травы на блоках земли)
|
||||
|
||||
```lua
|
||||
function on_blocks_tick(tps: int)
|
||||
```
|
||||
|
||||
Вызывается tps (20) раз в секунду
|
||||
|
||||
## События предметов
|
||||
|
||||
```lua
|
||||
function on_use(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при нажатии ПКМ не на блок.
|
||||
|
||||
```lua
|
||||
function on_use_on_block(x: int, y: int, z: int, playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при нажатии ПКМ на блок. Предотвращает установку блока, прописанного в `placing-block` если возвращает `true`
|
||||
|
||||
```lua
|
||||
function on_block_break_by(x: int, y: int, z: int, playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при нажатии ЛКМ на блок (в т.ч неразрушимый). Предотвращает разрушение блока, если возвращает `true`
|
||||
|
||||
## События мира
|
||||
|
||||
События мира для контент-пака прописываются в `scripts/world.lua`
|
||||
|
||||
```lua
|
||||
function on_world_open()
|
||||
```
|
||||
|
||||
Вызывается при загрузке мира
|
||||
|
||||
```lua
|
||||
function on_world_save()
|
||||
```
|
||||
|
||||
Вызывается перед сохранением мира
|
||||
|
||||
```lua
|
||||
function on_world_tick()
|
||||
```
|
||||
|
||||
Вызывается 20 раз в секунду
|
||||
|
||||
```lua
|
||||
function on_world_quit()
|
||||
```
|
||||
|
||||
Вызывается при выходе из мира (после сохранения)
|
||||
|
||||
## События макета
|
||||
|
||||
События прописываются в файле `layouts/имя_макета.xml.lua`.
|
||||
|
||||
```lua
|
||||
function on_open(invid: int, x: int, y: int, z: int)
|
||||
```
|
||||
|
||||
Вызывается при добавлении элемента на экран.
|
||||
При отсутствии привязки к инвентарю invid будет равен 0.
|
||||
При отсутствии привязки к блоку x, y, z так же будут равны 0.
|
||||
|
||||
```lua
|
||||
function on_close(invid: int)
|
||||
```
|
||||
|
||||
Вызывается при удалении элемента с экрана.
|
||||
|
||||
## События HUD
|
||||
|
||||
События связанные с игровым интерфейсом прописываются в файле `scripts/hud.lua`
|
||||
|
||||
```lua
|
||||
function on_hud_open(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается после входа в мир, когда становится доступна библиотека hud. Здесь на экран добавляются постоянные элементы.
|
||||
|
||||
```lua
|
||||
function on_hud_close(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при выходе из мира, перед его сохранением.
|
||||
|
||||
## Библиотеки движка
|
||||
|
||||
### file
|
||||
|
||||
Библиотека функций для работы с файлами
|
||||
Дает ID инвентаря открытого блока или 0
|
||||
|
||||
```python
|
||||
file.resolve(путь: str) -> str
|
||||
hud.get_player() -> int
|
||||
```
|
||||
|
||||
Функция приводит запись `точка_входа:путь` (например `user:worlds/house1`) к обычному пути. (например `C://Users/user/.voxeng/worlds/house1`)
|
||||
|
||||
> [!NOTE]
|
||||
> Функцию не нужно использовать в сочетании с другими функциями из библиотеки, так как они делают это автоматически
|
||||
|
||||
Возвращаемый путь не является каноническим и может быть как абсолютным, так и относительным.
|
||||
Дает ID игрока, к которому привязан пользовательский интерфейс
|
||||
|
||||
```python
|
||||
file.read(путь: str) -> str
|
||||
hud.pause()
|
||||
```
|
||||
|
||||
Читает весь текстовый файл и возвращает в виде строки
|
||||
Открывает меню паузы
|
||||
|
||||
```python
|
||||
file.read_bytes(путь: str) -> array of integers
|
||||
hud.resume()
|
||||
```
|
||||
|
||||
Читает файл в массив байт.
|
||||
Закрывает меню паузы.
|
||||
|
||||
```python
|
||||
file.write(путь: str, текст: str) -> nil
|
||||
```
|
||||
|
||||
Записывает текст в файл (с перезаписью)
|
||||
|
||||
```python
|
||||
file.write_bytes(путь: str, data: array of integers)
|
||||
```
|
||||
|
||||
Записывает массив байт в файл (с перезаписью)
|
||||
|
||||
```python
|
||||
file.length(путь: str) -> int
|
||||
```
|
||||
|
||||
Возвращает размер файла в байтах, либо -1, если файл не найден
|
||||
|
||||
```python
|
||||
file.exists(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути файл или директория
|
||||
|
||||
```python
|
||||
file.isfile(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути файл
|
||||
|
||||
```python
|
||||
file.isdir(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути директория
|
||||
|
||||
```python
|
||||
file.mkdir(путь: str) -> bool
|
||||
```
|
||||
|
||||
Создает директорию. Возвращает true если была создана новая директория
|
||||
|
||||
```python
|
||||
file.mkdirs(путь: str) -> bool
|
||||
```
|
||||
|
||||
Создает всю цепочку директорий. Возвращает true если были созданы директории.
|
||||
|
||||
### time
|
||||
## Библиотека time
|
||||
|
||||
```python
|
||||
time.uptime() -> float
|
||||
@@ -566,24 +489,8 @@ time.uptime() -> float
|
||||
|
||||
Возвращает время с момента запуска движка в секундах
|
||||
|
||||
## Доступные модули
|
||||
|
||||
### TOML сериализация/десериализация
|
||||
|
||||
```lua
|
||||
local toml = require "core:toml"
|
||||
|
||||
local t = {a=53, b=42, s="test", sub={x=1, y=6}}
|
||||
local s = toml.serialize(t)
|
||||
print(s)
|
||||
local t2 = toml.deserialize(s)
|
||||
```
|
||||
вывод:
|
||||
```toml
|
||||
b = 42
|
||||
s = "test"
|
||||
a = 53
|
||||
[sub]
|
||||
y = 6
|
||||
x = 1
|
||||
```python
|
||||
time.delta() -> float
|
||||
```
|
||||
|
||||
Возвращает дельту времени (время прошедшее с предыдущего кадра)
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
# Консоль
|
||||
|
||||
Для работы с командным интерпретатором предоставляется библиотека **console**
|
||||
|
||||
## Создание команд
|
||||
|
||||
Для создания команды консоли используется следующая функция:
|
||||
|
||||
```python
|
||||
console.add_command(схема: str, исполнитель: function)
|
||||
```
|
||||
|
||||
Схема имеет следующий синтаксис:
|
||||
|
||||
```
|
||||
название позиционные параметры {именованные параметры}
|
||||
```
|
||||
|
||||
Название может содержать:
|
||||
- латинницу
|
||||
- цифры (кроме первого символа)
|
||||
- `.`, `_`, `-`
|
||||
|
||||
Позиционные параметры разделяются пробелами и имеют следующий синтаксис:
|
||||
|
||||
```
|
||||
название:тип (вариант 1)
|
||||
название:тип=по-умолчанию (вариант 2)
|
||||
название:тип~центральное-значение (вариант 3)
|
||||
название:тип=по-умолчанию~центральное-значение (вариант 4)
|
||||
```
|
||||
|
||||
Доступные типы:
|
||||
- **int** - целое число
|
||||
- **num** - дробное число
|
||||
- **str** - строка
|
||||
- **sel** - селектор (id объекта представленный целым числом)
|
||||
- **enum** - перечисление
|
||||
|
||||
На вариантах 3 и 4 показан оператор `~` позволяющий использовать относительные значения. *Центральное значение* - значение, относительно которого будет указываться пользовательское. Например позиция игрока.
|
||||
|
||||
Относительный оператор работает только с числами (num или int)
|
||||
|
||||
В качестве центральных значений могут указываться переменные, назначаемые через **console.set**.
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
x:num~pos.x
|
||||
```
|
||||
|
||||
Переменные можно указывать и в качестве значений по-умолчанию, при использовании префикса `$`:
|
||||
|
||||
```python
|
||||
t:int=$time
|
||||
```
|
||||
|
||||
Перечисления указывазываются в формате:
|
||||
|
||||
```python
|
||||
mode:[replace|destruct|none]
|
||||
```
|
||||
|
||||
Либо через переменную:
|
||||
|
||||
```python
|
||||
mode:enum $modes
|
||||
```
|
||||
|
||||
Селекторы указываются с префиксом `@`. На данный момент являются заглушкой, по причине отсутствия объектной модели. Следует делать опциональными и использовать переменные:
|
||||
|
||||
```python
|
||||
obj:sel=$obj.id # obj.id - id игрока
|
||||
```
|
||||
|
||||
Именованные аргументы указываются в специальном блоке, ограниченном фигурными скобками `{ }` по той же схеме.
|
||||
|
||||
Пример:
|
||||
|
||||
```python
|
||||
eval name:str="World" {greeting:str='Hello'}
|
||||
```
|
||||
|
||||
## Примеры схем команд
|
||||
|
||||
Схемы существующих команд можно найти в файле `res/script/stdcmd.lua`.
|
||||
|
||||
Пример - команда **tp**:
|
||||
|
||||
```python
|
||||
tp obj:sel=$obj.id x:num~pos.x y:num~pos.y z:num~pos.z
|
||||
```
|
||||
|
||||
Полный lua код создания команды:
|
||||
|
||||
```lua
|
||||
console.add_command(
|
||||
"tp obj:sel=$obj.id x:num~pos.x y:num~pos.y z:num~pos.z",
|
||||
"Teleport object",
|
||||
function (args, kwargs)
|
||||
player.set_pos(unpack(args))
|
||||
end
|
||||
)
|
||||
```
|
||||
|
||||
- В args передаются готовые значения позиционных аргументов.
|
||||
- В kwargs передается таблица значений именованных аргументов.
|
||||
|
||||
Проверку и приведение типов интерпретатор команд производит автоматически.
|
||||
@@ -0,0 +1,59 @@
|
||||
# Пользовательский ввод
|
||||
|
||||
Обработка нажатий клавиш и кнопок мыши обрабатываются через привязки (bindings), которые назначаются в паке, в файле `config/bindings.toml` в формате:
|
||||
|
||||
```toml
|
||||
packid.binding.name="inputtype:codename"
|
||||
```
|
||||
|
||||
- packid - опционально, но желательно
|
||||
- inputtype - key или mouse
|
||||
- codename - имя клавиши или кнопки мыши (left/right/middle)
|
||||
|
||||
## Имена клавиш
|
||||
|
||||
- space, backspace, tab, enter, caps-lock, escape
|
||||
- left-ctrl, left-shift, left-alt, left-super
|
||||
- right-ctrl, right-shift, right-alt, right-super
|
||||
- delete, home, end, insert, page-up, page-down
|
||||
- left, right, down, up
|
||||
- a..z
|
||||
- 0..9
|
||||
- f1..f25
|
||||
|
||||
## Библиотека input
|
||||
|
||||
```python
|
||||
input.keycode(keyname: str) -> int
|
||||
```
|
||||
|
||||
Возвращает код клавиши по имени, либо -1
|
||||
|
||||
```python
|
||||
input.mousecode(mousename: str) -> int
|
||||
```
|
||||
|
||||
Возвращает код кнопки мыши по имени, либо -1
|
||||
|
||||
```python
|
||||
input.add_callback(bindname: str, callback: function)
|
||||
```
|
||||
|
||||
Назначает функцию, которая будет вызываться при активации привязки. Пример:
|
||||
```lua
|
||||
input.add_callback("hud.inventory", function ()
|
||||
print("Inventory open key pressed")
|
||||
end)
|
||||
```
|
||||
|
||||
```python
|
||||
input.get_mouse_pos() -> {int, int}
|
||||
```
|
||||
|
||||
Возвращает позицию курсора на экране.
|
||||
|
||||
```python
|
||||
input.get_bindings() -> массив строк
|
||||
```
|
||||
|
||||
Возвращает названия всех доступных привязок.
|
||||
@@ -0,0 +1,126 @@
|
||||
# События движка
|
||||
|
||||
## События блоков
|
||||
|
||||
Функции для обработки событий, прописываемые в скрипте блока.
|
||||
|
||||
```lua
|
||||
function on_placed(x, y, z, playerid)
|
||||
```
|
||||
|
||||
Вызывается после установки блока игроком
|
||||
|
||||
```lua
|
||||
function on_broken(x, y, z, playerid)
|
||||
```
|
||||
|
||||
Вызывается после разрушения блока игроком
|
||||
|
||||
```lua
|
||||
function on_interact(x, y, z, playerid) -> bool
|
||||
```
|
||||
|
||||
Вызывается при нажатии на блок ПКМ. Предотвращает установку блоков, если возвращает `true`
|
||||
|
||||
```lua
|
||||
function on_update(x, y, z)
|
||||
```
|
||||
|
||||
Вызывается при обновлении блока (если изменился соседний блок)
|
||||
|
||||
```lua
|
||||
function on_random_update(x, y, z)
|
||||
```
|
||||
|
||||
Вызывается в случайные моменты времени (рост травы на блоках земли)
|
||||
|
||||
```lua
|
||||
function on_blocks_tick(tps: int)
|
||||
```
|
||||
|
||||
Вызывается tps (20) раз в секунду
|
||||
|
||||
## События предметов
|
||||
|
||||
Функции для обработки событий, прописываемые в скрипте предмета.
|
||||
|
||||
```lua
|
||||
function on_use(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при нажатии ПКМ не на блок.
|
||||
|
||||
```lua
|
||||
|
||||
function on_use_on_block(x: int, y: int, z: int, playerid: int)
|
||||
|
||||
```
|
||||
|
||||
Вызывается при нажатии ПКМ на блок. Предотвращает установку блока, прописанного в `placing-block` если возвращает `true`
|
||||
|
||||
```lua
|
||||
function on_block_break_by(x: int, y: int, z: int, playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при нажатии ЛКМ на блок (в т.ч неразрушимый). Предотвращает разрушение блока, если возвращает `true`
|
||||
|
||||
## События мира
|
||||
|
||||
События мира для контент-пака прописываются в `scripts/world.lua`
|
||||
|
||||
```lua
|
||||
function on_world_open()
|
||||
```
|
||||
|
||||
Вызывается при загрузке мира
|
||||
|
||||
```lua
|
||||
function on_world_save()
|
||||
```
|
||||
|
||||
Вызывается перед сохранением мира
|
||||
|
||||
```lua
|
||||
function on_world_tick()
|
||||
```
|
||||
|
||||
Вызывается 20 раз в секунду
|
||||
|
||||
```lua
|
||||
function on_world_quit()
|
||||
```
|
||||
|
||||
Вызывается при выходе из мира (после сохранения)
|
||||
## События макета
|
||||
|
||||
События прописываются в файле `layouts/имя_макета.xml.lua`.
|
||||
|
||||
```lua
|
||||
function on_open(invid: int, x: int, y: int, z: int)
|
||||
```
|
||||
|
||||
Вызывается при добавлении элемента на экран.
|
||||
- При отсутствии привязки к инвентарю invid будет равен 0.
|
||||
- При отсутствии привязки к блоку x, y, z так же будут равны 0.
|
||||
|
||||
```lua
|
||||
function on_close(invid: int)
|
||||
```
|
||||
|
||||
Вызывается при удалении элемента с экрана.
|
||||
|
||||
## События HUD
|
||||
|
||||
События связанные с игровым интерфейсом прописываются в файле `scripts/hud.lua`
|
||||
|
||||
```lua
|
||||
function on_hud_open(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается после входа в мир, когда становится доступна библиотека hud. Здесь на экран добавляются постоянные элементы.
|
||||
|
||||
```lua
|
||||
function on_hud_close(playerid: int)
|
||||
```
|
||||
|
||||
Вызывается при выходе из мира, перед его сохранением.
|
||||
@@ -0,0 +1,137 @@
|
||||
## Библиотека *file*
|
||||
|
||||
Библиотека функций для работы с файлами
|
||||
|
||||
```python
|
||||
file.resolve(путь: str) -> str
|
||||
```
|
||||
|
||||
Функция приводит запись `точка_входа:путь` (например `user:worlds/house1`) к обычному пути. (например `C://Users/user/.voxeng/worlds/house1`)
|
||||
|
||||
> [!NOTE]
|
||||
> Функцию не нужно использовать в сочетании с другими функциями из библиотеки, так как они делают это автоматически
|
||||
|
||||
Возвращаемый путь не является каноническим и может быть как абсолютным, так и относительным.
|
||||
|
||||
```python
|
||||
file.read(путь: str) -> str
|
||||
```
|
||||
|
||||
Читает весь текстовый файл и возвращает в виде строки
|
||||
|
||||
```python
|
||||
file.read_bytes(путь: str) -> array of integers
|
||||
```
|
||||
|
||||
Читает файл в массив байт.
|
||||
|
||||
```python
|
||||
file.write(путь: str, текст: str) -> nil
|
||||
```
|
||||
|
||||
Записывает текст в файл (с перезаписью)
|
||||
|
||||
```python
|
||||
file.write_bytes(путь: str, data: array of integers)
|
||||
```
|
||||
|
||||
Записывает массив байт в файл (с перезаписью)
|
||||
|
||||
```python
|
||||
file.length(путь: str) -> int
|
||||
```
|
||||
|
||||
Возвращает размер файла в байтах, либо -1, если файл не найден
|
||||
|
||||
```python
|
||||
file.exists(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути файл или директория
|
||||
|
||||
```python
|
||||
file.isfile(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути файл
|
||||
|
||||
```python
|
||||
file.isdir(путь: str) -> bool
|
||||
```
|
||||
|
||||
Проверяет, существует ли по данному пути директория
|
||||
|
||||
```python
|
||||
file.mkdir(путь: str) -> bool
|
||||
```
|
||||
|
||||
Создает директорию. Возвращает true если была создана новая директория
|
||||
|
||||
```python
|
||||
file.mkdirs(путь: str) -> bool
|
||||
```
|
||||
|
||||
Создает всю цепочку директорий. Возвращает true если были созданы директории.
|
||||
|
||||
```python
|
||||
file.find(путь: str) -> str
|
||||
```
|
||||
|
||||
Ищет файл от последнего пака до res. Путь указывается без префикса. Возвращает путь с нужным префиксом. Если файл не найден, возвращает nil.
|
||||
|
||||
```python
|
||||
file.remove(путь: str) -> bool
|
||||
```
|
||||
|
||||
Удаляет файл. Возращает **true** если файл существовал. Бросает исключение при нарушении доступа.
|
||||
|
||||
```python
|
||||
file.remove_tree(путь: str) -> int
|
||||
```
|
||||
|
||||
Рекурсивно удаляет файлы. Возвращает число удаленных файлов.
|
||||
|
||||
## Библиотека json
|
||||
|
||||
Библиотека содержит функции для сериализации и десериализации таблиц:
|
||||
|
||||
```python
|
||||
json.tostring(object: table, human_readable: bool=false) -> str
|
||||
```
|
||||
|
||||
Сериализует объект в JSON строку. При значении второго параметра **true** будет использовано многострочное форматирование, удобное для чтения человеком, а не компактное, использующееся по-умолчанию.
|
||||
|
||||
```python
|
||||
json.parse(code: str) -> table
|
||||
```
|
||||
|
||||
Парсит JSON строку в таблицу.
|
||||
|
||||
## Библиотека toml
|
||||
|
||||
Библиотека содержит функции для сериализации и десериализации таблиц:
|
||||
|
||||
```python
|
||||
toml.tostring(object: table) -> str
|
||||
```
|
||||
|
||||
Сериализует объект в TOML строку.
|
||||
|
||||
```python
|
||||
toml.parse(code: str) -> table
|
||||
```
|
||||
|
||||
Парсит TOML строку в таблицу.
|
||||
|
||||
## Сохранение данных в мире
|
||||
|
||||
При сохранении данных пака в мире следует использовать функцию
|
||||
```python
|
||||
pack.data_file(packid: str, filename: str) -> str
|
||||
```
|
||||
|
||||
Функция возвращает путь к файлу данных по типу: `world:data/packid/filename`
|
||||
|
||||
и создает недостающие директории в пути.
|
||||
|
||||
При использовании путей не соответствующим `data/{packid}/...` возможна потеря данных при перезаписи мира.
|
||||
Reference in New Issue
Block a user