Настройка idle
Основные принципы
Список fms состояний, из которых возможен запуск анимаций типа idle:
board - прилинкованный
lie_idle - лежит
snipe - из-за забора выглядывает
squat - сидит
idle - стоит
Выбор idle анимации идёт в 2 стадии:
Выбирается запрос с помощью \scene\properties\animation_selector\human_idle_selector.set
Выбираются конкретные анимации idle
Если запрос на анимацию вернёт пустую строку, то солдат стоит неподвижно некоторое время, потом выбор стартует заново
Для создания цепочек в fsm хранится текущее состояние idle
Семафоры
Семафоры используются для создания задержки между переключениями в разные состояния или для блокировки на время определенных действий.
Семафор может быть в 2-х состояниях - разрешен или запрещен. После имени семафора указывается время блокировки семафора в секундах. При этом 0 разблокирует семафор, 1 - блокирует семафор на 1 с. Рекомендуется указывать два числа для создания рандома времени блокировки, чтобы не получить колышащееся в общий такт поле юнитов.
Добавлять собственные семафоры можно в разделе init
Пример использования семофоров и выбора анимаций idle из файла human_idle_selector.set
В примере используются семофоры:
can_smoke - когда уже можно начинать курить
can_inhale - когда можно делать следующую затяжку
can_action - когда можно запускать более активный idle, а не просто дыхание и мелкие шевеления
В блоке selector задается запрос на анимации через human.set. В блоке selector можно также переключать состояния и семафоры, если это необходимо.
Можно добавлять свои запросы на анимации и прописывать выборку анимаций в файле human_idle.inc
Чтобы добавить возможность idle в состоянии, где его раньше никогда не было, необходимо добавить его поддержку в коде. Состояния, которые на текущий момент имеют поддержку в коде: idle - играет обычные idle анимации smoking - курит
Условия
Условия в human.set, которые используются в первую очередь:
{if human_fsm_idle_semaphore "smoke"
{if human_fsm_idle_state "smoking_begin"
{if fsm_tags "board"
Запросы
Варианты запросов на анимации idle в блоке run:
для запросов *_idle предполагается какая-то серьёзная активность для запросов *_breath - ожидаются анимации дыхания или небольшого шевеления
Стоит
stand_idle
stand_breath
Сидит
squat_idle
squat_breath
Смотрит из-за горизонтального укрытия (окопы, заборы по пояс) snipe_breath
Лежит lie_idle lie_breath
Поджигает сигарету stand_smoking_begin
Делает затяжку stand_smoking_process
Тушит сигарету stand_smoking_end
Last updated