Перейти к содержанию

Сниппет LuaDeb

Материал из Luanti НашиТут

Lua контроллер Mesecons при игре в серверном варианте не имеет даже самых простых средств отладки. Даже простой вывод функцией print не может быть получен на стороне игрока, потому что код контроллера выполняется на сервере игры. Остаётся только выводить отладочную информацию средствами, доступными в игре - digilines:lcd , digiterms:lcd_monitor , digistuff:touchscreen . И все не очень удобно, всё имеет недостатки. Чтобы как-то решить проблему требуется логирование с буферизацией. Собственно, эту задачу и решает данный отладчик - предоставляет унифицированную структуру программы, функцию log() и возможность просмотра накопленных сообщений по запросу.

Полностью разделить код прикладной программы и отладчика вряд ли получится при текущей реализации системы Lua контроллер Mesecons. Поэтому прикладная часть просто вписывается в данный шаблон.

Унификация структуры сводится к трём функциям - fmain(), fintr(), fdigi(), которые дополняются прикладным кодом. Плюс механизм дополнения панели отладчика собственными кнопками управления.

Принципиальная схема отладчика:

mesecons:wire_00000000_off
mesecons:wire_00000000_off
mesecons_luacontroller:luacontroller0000
digilines:wire_std_11100000
digilines:wire_std_11100000
digilines:wire_std_11100000
digistuff:touchscreen
(p1)
digilines:lcd
(d1)
digiterms:lcd_monitor
(d1)

Где p1 и d1 - названия каналов digiline, которые закреплены за отладчиком, и могут быть заменены через определение констант.

Прикладные датчики и исполнители подключаются к линиям digilines или msecons. Естественное ограничение - использование отладчика требует одного порта контроллера для подключения digilines.

Особенности мониторов.

  • digiterms:lcd_monitor предоставляет экран в 6 строк по 12 символов. Вывод скроллируется. То есть, можно видеть несколько последовательных выводов, в пределах собственного буфера вывода экрана.
  • digilines:lcd работает в режиме перезаписи - последний вывод и есть всё содержание экрана. Есть дополнительное свойство - при наведении на экран содержание последнего вывода отображается как статус объекта.

Привязка нескольких мониторов на один канал digiline дублирует информацию. Это может быть полезно для разнесения мониторов в удобные для наблюдения места или для использования двух разных типов мониторов.

<code>

do return end
-- здесь пока ничего нет

</code>