Skip to content

События

Итак, модуль существует всё время жизни игровой сессии, во время которой игровой мир может неоднократно уничтожаться и создаваться снова. Допустим, автору модуля необходимо выполнять какие-то действия в момент создания игрового мира (например, помещать что-то в инвентарь игрока). Как это сделать? Модуль может регистрировать специальные функции-обработчики некоторых событий. Например, для отслеживания события "создание игрового мира", мы регистрируем обработчик init:

lua
stead.mod_init(function()
        declare {
                game = std.ref 'game',
                pl = std.ref 'player',
        }
end)

stead -- это интерфейсный объект для доступа к низкоуровневым функциям INSTEAD. Часто, удобно сделать локальную ссылку std, и пользоваться ей, например:

lua
local std = stead -- сделали ссылку на stead

std.mod_init(function()
        declare {
                game = std.ref 'game',
                pl = std.ref 'player',
        }
end)

В дальнейшем изложении всегда будет использоваться std вместо stead.

Приведённый код -- инициализация стандартной библиотеки stdlib из STEAD3. Как видим, тут происходит объявление переменных-ссылок game и pl для удобства работы с этими объектами.

Итак, регистрация обработчика выполняется с помощью вызова:

lua
std.mod_тип_события(функция, [приоритет])

Параметр [приоритет] (чем меньше -- тем приоритетней) является необязательным и определяет порядок вызова вашей функции относительно других функций для данного события, например:

lua
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).