# Дополнения к 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".