forked from Reload/techage_modpack
117 lines
7.5 KiB
Markdown
117 lines
7.5 KiB
Markdown
|
# Дополнения к TA4
|
|||
|
В настоящее время доступны следующие расширения для TA4:
|
|||
|
|
|||
|
- Сенсорный экран
|
|||
|
|
|||
|
## Сенсорный экран
|
|||
|
|
|||
|
[ta4_addons_touchscreen|image]
|
|||
|
|
|||
|
Сенсорный экран может использоваться как обычный дисплей TA4.
|
|||
|
Кроме того, он поддерживает следующие команды, которые позволяют создавать форму, открываемую щелчком правой кнопкой мыши по сенсорному экрану:
|
|||
|
|
|||
|
- add_content: Пытается добавить элемент в форму сенсорного экрана. Принимает определение элемента в качестве полезной нагрузки. При успешном выполнении возвращает ID только что созданного элемента.
|
|||
|
- update_content: Пытается изменить уже существующий элемент формы сенсорного экрана. Принимает определение элемента с дополнительным полем id, которое можно использовать для выбора элемента, который нужно обновить. При успешном выполнении возвращает true.
|
|||
|
- remove_content: Пытается удалить существующий элемент из формы сенсорного экрана. Принимает хранилище в качестве полезной нагрузки. Единственным полем в этом хранилище должно быть поле id. При успешном выполнении возвращает true.
|
|||
|
- private: Делает сенсорный экран частным. Форму могут отправлять только игроки с доступом к защите.
|
|||
|
- public: Делает сенсорный экран общедоступным. Все игроки могут отправлять форму.
|
|||
|
|
|||
|
Определение элемента представляет собой структуру данных хранилища. Вы можете установить тип элемента в поле "type" этого хранилища.
|
|||
|
Вы можете устанавливать свойства элемента в качестве дополнительных полей в этом хранилище.
|
|||
|
Всегда предоставляются более или менее разумные значения по умолчанию для этих дополнительных свойств,
|
|||
|
но настоятельно рекомендуется всегда предоставлять значения самостоятельно, поскольку значения по умолчанию не задокументированы и могут измениться.
|
|||
|
|
|||
|
При отправке формы в контроллер возвращается хранилище в качестве сообщения.
|
|||
|
Поля, доступные в обратных вызовах Minetest on_receive_fields, устанавливаются в этом хранилище.
|
|||
|
Поле "_sent_by" содержит имя отправителя.
|
|||
|
Вы можете получить доступ к этому хранилищу, используя функцию $get_msg(true) контроллера Lua.
|
|||
|
Пожалуйста, не забудьте о "true" в качестве первого параметра; в противном случае вы получите доступ только к строковому представлению сообщения.
|
|||
|
|
|||
|
Форма отображается с использованием формы версии 3 (включены реальные координаты), поэтому используйте последнюю версию клиента Minetest.
|
|||
|
|
|||
|
Когда кто-то открывает сенсорный экран, сообщение будет отправлено контроллеру.
|
|||
|
Это сообщение содержит хранилище, в котором поле "_touchscreen_opened_by" устанавливается в соответствующее имя игрока.
|
|||
|
|
|||
|
### Поддерживаемые элементы и их свойства
|
|||
|
|
|||
|
[ta4_addons_touchscreen|image]
|
|||
|
|
|||
|
Обратите внимание: Этот список может быть изменен.
|
|||
|
|
|||
|
button: x, y, w, h, name, label
|
|||
|
label: x, y, label
|
|||
|
image: x, y, w, h, texture_name
|
|||
|
animated_image: x, y, w, h, name, texture_name, frame_count, frame_duration, frame_start
|
|||
|
item_image: x, y, w, h, item_name
|
|||
|
pwdfield: x, y, w, h, name, label
|
|||
|
field: x, y, w, h, name, label, default
|
|||
|
field_close_on_enter: name, close_on_enter
|
|||
|
textarea: x, y, w, h, name, label, default
|
|||
|
image_button: x, y, w, h, texture_name, name, label
|
|||
|
item_image_button: x, y, w, h, item_name, name, label
|
|||
|
button_exit: x, y, w, h, name, label
|
|||
|
image_button_exit: x, y, w, h, texture_name, name, label
|
|||
|
box: x, y, w, h, color
|
|||
|
checkbox: x, y, name, label, selected
|
|||
|
|
|||
|
Для получения дополнительной информации о значении этих элементов рекомендуется обратиться к файлу lua_api.txt в документации Minetest.
|
|||
|
|
|||
|
### Пример
|
|||
|
|
|||
|
[ta4_addons_touchscreen|image]
|
|||
|
|
|||
|
**Init:**
|
|||
|
|
|||
|
```lua
|
|||
|
$events(true)
|
|||
|
$loopcycle(0)
|
|||
|
|
|||
|
TOUCHSCREEN_NUM = 338
|
|||
|
|
|||
|
counter = 1
|
|||
|
|
|||
|
$send_cmnd(TOUCHSCREEN_NUM, "remove_content")
|
|||
|
|
|||
|
res = $send_cmnd(TOUCHSCREEN_NUM, "add_content", Store("type", "button", "w", 5, "label", counter))
|
|||
|
res2 = $send_cmnd(TOUCHSCREEN_NUM, "add_content", Store("type", "button", "w", 5, "y", 2, "label", counter))
|
|||
|
|
|||
|
$print("ID: "..res)
|
|||
|
```
|
|||
|
|
|||
|
**Loop:**
|
|||
|
|
|||
|
```lua
|
|||
|
local num,msg = $get_msg(true)
|
|||
|
|
|||
|
if num == tostring(TOUCHSCREEN_NUM) and msg.next then
|
|||
|
for k,v in msg.next() do
|
|||
|
if k == "button" then
|
|||
|
counter = counter + 1
|
|||
|
$print(res)
|
|||
|
$send_cmnd(TOUCHSCREEN_NUM, "update_content", Store("type", "button", "w", "5", "label", counter, "id", res))
|
|||
|
if counter > 10 then
|
|||
|
$send_cmnd(TOUCHSCREEN_NUM, "remove_content", Store("id", res2))
|
|||
|
else
|
|||
|
$send_cmnd(TOUCHSCREEN_NUM, "update_content", Store("type", "button", "w", "5", "y", 2, "label", counter, "id", res2))
|
|||
|
end
|
|||
|
end
|
|||
|
$print(k..": "..v)
|
|||
|
$display(TOUCHSCREEN_NUM, 0, k)
|
|||
|
$display(TOUCHSCREEN_NUM, 0, v)
|
|||
|
end
|
|||
|
end
|
|||
|
```
|
|||
|
|
|||
|
## Матричный экран
|
|||
|
|
|||
|
[ta4_addons_matrix_screen|image]
|
|||
|
|
|||
|
Экран Matrix имеет разрешение 16x16 пикселей.
|
|||
|
Доступны различные палитры с 64 цветами каждая.
|
|||
|
|
|||
|
Для программирования экрана вы можете отправить строку, закодированную в формате base64, в качестве данных для команды "pixels".
|
|||
|
Эта строка должна содержать 256 символов. Каждый символ соответствует одному пикселю, построчно от верхнего левого угла до нижнего правого угла.
|
|||
|
|
|||
|
Рекомендуется использовать программу TA4 Matrix Screen Programmer для удобного создания таких строк.
|
|||
|
|
|||
|
Палитру цветов можно изменить с помощью команды "palette".
|