А у меня там примитивная универсальная стейтмашина =)
У бота есть всего два стейта в поведении основном: идти цели, и если дошёл до цели - выполнять действие. И вот тут самое интересное. Действие выполняется в зависимости от типа цели. У действия есть время, и есть 3 временных отрезка на нём: начало действия, непосредственно время самого действия, и конец действия.
И дальше можно уже пилить любые стейты под действия.
Например, действие: танец. Челик начало действия - включение анимации танца. Конец действия - выключение анимации танца. И во время действия можно делать проверки на оставшееся время и вставлять промежуточные какие-то поведения ещё.
По сцене расставляем точки, которым значение енума ставим "танец", и всё, танцпол готов.