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". |