Создание скриптов
Скрипты для масок пишутся на языке AngelScript — это C-подобный скриптовый язык. Если у вас есть опыт программирования на C/C++/C#, то вы без труда в нём разберетесь.
Особенности создания скриптов для масок
Для работы со скриптами в масках необходимо в файле конфигурации подключить файл скрипта:
{
"preview": "Icon.png",
"script" : "main.as"
}
Файл main.as
должен содержать функцию Init()
— это входная точка запуска скрипта, которая будет вызвана при загрузке маски. В этой функции можно применить начальные настройки или подписаться на события. Минимальный скрипт может выглядеть так:
void Init()
{
Print("Hello world");
}
При запуске маски этот скрипт выведет в консоль сообщение Hello world
. Обратите внимание, чтобы увидеть его или иные результаты работы скрипта, необходимо запустить приложение test.mask с консолью. Также консоль отображает информацию об ошибках, которые возникают в ходе тестирования маски.
Важно! Если функция
Print()
ничего не выводит в консоль, то попробуйте вместо неё воспользоваться функциейlog.Error()
.
Включаемые файлы
При разработке сложных скриптов может потребоваться разделить исходный код на отдельные файлы. Сделать это можно с помощью директивы #include
, после которой в кавычках укажите путь к включаемому файлу. Например:
#
#
#
Включаемые файлы скриптов должны быть размещены по следующему пути: Scripts/src/…
.
Получение эффекта по тегу
Чтобы было проще из узла сцены извлечь тот или иной эффект, эффекту объявленному в mask.json
необходимо добавить параметр, присваивающий тег.
{
"preview": "Icon.png",
"script": "main.as",
"effects": [
{
"name": "colorfilter",
"tag": "my_tag",
"lookup": "ColorFilter/lookup.png",
"intensity": 0.75
}
]
}
Далее в файле скрипта нужно сделать следующее:
- •Объявить переменную типа
Array<Node@>
; - •Получить узел сцены;
- •Получить из узла сцены массив элементов по заданному тегу.
Array<Node@> my_array_node;
void Init()
{
Scene@ scene = script.defaultScene;
my_array_node = scene.GetChildrenWithTag("my_tag", true);
}
Если необходимо получить какой-либо один элемент, то после вызова функции введите индекс этого элемента. Нумерация начинается с 0
, где 0
— это первый встретившийся эффект с данным тегом, 1
- второй, и так далее. Соответственно, у возвращаемого значения будет тип Node
.
Node@ my_node;
void Init()
{
Scene@ scene = script.defaultScene;
my_node = scene.GetChildrenWithTag("my_tag", true)[0];
}