# Cкрипты типов субъектов

### Структура DQE2_State

> Данная структура создается для каждого субъекта в отдельности и позволяет хранить пользовательские данные о нем. Описание этой структуры обязательно, даже если она не используется!

### Обязательные события в скриптах

> - function Init(state:DQE2_State):boolean;
>   Если функция возвращает true, то субъект считается запущенным, и функция Step будет вызываться для него каждый раз при вызове World.Step.
> - function Step(state:DQE2_State):boolean;
>   Если субъект запущен и скрипт не приостановлен, то функция Step вызывается каждый раз при вызове World.Step для каждого запущенного субъекта. Если функция вернула true, то субъект продолжает быть активным, если false - субъект считается более неактивным и для него вызывается функция OnDie (необязательная).

### Необязательные события в скриптах

> - procedure OnDie(state:DQE2_State);
>   Вызывается при деактивации субъекта, т.е. если Step вернул false. Позволяет произвести необходимые действия по завершению работы субъекта.

### Алгоритм обработки скриптов типов субъектов

> 1. При переходе на новую зону для всех субъектов в этой зоне создается уникальная запись типа DQE2_State и происходит вызов функции Init для всех субъектов. Если для конкретного субъекта Init вернул true, то данный субъект считается активным.
> 2. При каждом World.Step для каждого активного субъекта вызывается скриптовая функция Step. Если данная функция вернула false, то субъект перестает быть активным и для него вызывается функция OnDie.
> 3. При переходе на новую зону все ранее запущенные скрипты для субъектов останавливаются (при этом функция OnDie не вызывается).