События
Итак, модуль существует всё время жизни игровой сессии, во время которой игровой мир может неоднократно уничтожаться и создаваться снова. Допустим, автору модуля необходимо выполнять какие-то действия в момент создания игрового мира (например, помещать что-то в инвентарь игрока). Как это сделать? Модуль может регистрировать специальные функции-обработчики некоторых событий. Например, для отслеживания события "создание игрового мира", мы регистрируем обработчик init:
stead.mod_init(function()
declare {
game = std.ref 'game',
pl = std.ref 'player',
}
end)stead -- это интерфейсный объект для доступа к низкоуровневым функциям INSTEAD. Часто, удобно сделать локальную ссылку std, и пользоваться ей, например:
local std = stead -- сделали ссылку на stead
std.mod_init(function()
declare {
game = std.ref 'game',
pl = std.ref 'player',
}
end)В дальнейшем изложении всегда будет использоваться std вместо stead.
Приведённый код -- инициализация стандартной библиотеки stdlib из STEAD3. Как видим, тут происходит объявление переменных-ссылок game и pl для удобства работы с этими объектами.
Итак, регистрация обработчика выполняется с помощью вызова:
std.mod_тип_события(функция, [приоритет])Параметр [приоритет] (чем меньше -- тем приоритетней) является необязательным и определяет порядок вызова вашей функции относительно других функций для данного события, например:
local function init()
dprint("Очень ранний init");
end
std.mod_init(init, -10);Перечислим все события, для которых можно зарегистрировать свой обработчик.
- init - инициализация мира. Вызывается перед init() игры;
- done - деинициализация мира;
- start - запуск игры после инициализации мира (непосредственно перед вызовом start() игры). В обработчик придёт параметр load (true -- если это загрузка из файла сохранения);
- cmd - вызывается перед выполнением команды. Если вернёт не nil -- воспринимается движком как реакция на команду. В качестве параметра
- массив (команда, параметр1, параметр2, ...);
- step - вызывается после выполнения команды. В качестве параметра -- true (команда выполнена), или false (ошибочная команда); Выполняется после game:step();
- save - вызывается после сохранения динамических объектов игры в файл сохранения. В качестве параметра -- указатель на файл сохранения (Lua).