Lua
Lua - скриптовый язык программирования.
Официальный сайт Lua - http://www.lua.org/home.html.
http://tylerneylon.com/a/learn-lua/
http://docs.madewithmarmalade.com/display/MD/Introduction+to+Lua
Введение
Lua - динамически типизированный язык, предназначенный для использования в качестве расширения или в качестве скриптового языка, и при этом достаточно компактный, чтобы поместиться на различных исполняющих платформах. Он поддерживает небольшое количество структур данных, такие как логические значения, числа (по умолчанию — двойной точности с плавающей точкой), а также строки.
Используется для удобства вычислений и увеличения скорости исполнения кода.
Создание скрипта
В машине состояний, выбрав добавляемое свойство, есть возможность создать или открыть уже существующий скрипт (edit script):
Программа - интерпретатор для работы со скриптами Lua - ZeroBrane Studio: http://studio.zerobrane.com/
Основные функции
При создании скриптов в первой вкладке всегда создается файл viewer.lua, где перечислен список доступных функций и параметров.
Существует четыре вида функций для взаимодействия скрипта с машиной состояний:
Добавлены функции (вытягивание данных из текстовой базы):
viewer.getResFromTxtDB(txtID,tp,defValue)
viewer.getStrFromTxtDB(txtID,sense,defValue)
С их помощью можно вытянуть иконку из текстовой базы и вытянуть текст по текущей локализации.
Так же частично доступна библиотека os:
date
difftime
time
Она позволит нам форматировать время.
Отладка
print(e1, e2, ...) Печатает значения аргументов. В конце выводится перевод строки. Эта функция не предназначена для форматного вывода, а только для быстрого (отладочного) вывода значений переменных.
В app.icf при установке
[GameTrace]
Level="Verbose"
В логе у нас появятся данные из скриптов со всеми операциями:
D/IScript IScript::callScriptMethod() callScriptMethod: "lottery_scpt:init"
D/IScript viewer_getResFromTxtDB() viewer.getResFromTxtDB(5670,0,666)->666
Пример использования
Рассмотрим пример использования скрипта для написания программы Калькулятор
Создаем машину состояний с именем "control", в ней создаем скрипт obj_control.lua. В функции init () объявляем переменные:
self.res - результат вычислений self.valLeft - переменная, в которую записываем первое число self.valRight - переменная, в котрую записываем второе число self.valRightExiste = false self.operatorSelected - флаг для ввода оператора (+,-,/,*), который записываем в true, если ввели первую переменную. self.operator - ввод самого оператора self.txt - вывод вычислений в строку
По тапу на кнопки 0-9 записываем машине соответствующий параметр и вызываем состояние:
При вызове состояния pressedDigit скриптом запускается соответствующая функция:
Объявляем локальную переменную local digit, в которую будем записывать значение параметра pressed (записанное по тапу на кнопку).
ID("control") - функция, которая возвращает ID объекта с именем "control" - сделано для удобства переноса скриптов из одного проекта в другой, не подвязываясь к ID объекта. НО, при импорте скрипта в другой проект важно проверять наличие объектов с таким же именем. Их быть не должно! В противном случае при сохранении проекта в редакторе будет выдаваться ошибка