Перейти к содержанию

Стейты

Стейты позволяют анимировать, задавать задержки и исполнять функции в определённые моменты времени. Язык конфигурации стейтов очень похож на Decorate.

Важно понимать, что они работают не так, как кажется многим! Формально говоря,

  • State (состояние, но принято называть "стейт") — это одна запись в таблице конечной машины состояний актора.
  • State Sequence (последовательность стейтов) — однонаправленно соединённая при компиляции череда состояний вплоть до прерывания или зацикливания.
  • State Label (метка стейта, название стейта) — это мнемоническое название стейта. В руководстве обозначается как "Название_стейта:" (например, "See:" или "AltFire:"),

Как работают стейты

Стейт-машина (подстистема актора, отвечающая за смену стейтов) начинает последовательное исполнение от стейта, на который указывает метка стейта "Spawn:". Если в стейте есть какое-то действие — исполняет его, затем приостанавливается на указанную в стейте задержку. Как только время задержки вышло, переходит на следующий стейт.

В случае прерывания текущий стейт вне зависимости от оставшейся задержки переходит туда, куда указывает прерывание. При необходимости перехода монстра в анимацию боли, например, текущая последовательность стейтов прерывается в пользу последовательности стейтов, начинающейся с метки стейта Pain:.

Блок стейтов задаётся ключевым словом States {} , например:

States {
Spawn:
    TROO AB 10;
    Loop;
}

Подробнее вопрос можно изучить в статье "Как на самом деле работает стейт-машина".