Построение новых элементов головоломки

Для нашей платформы мы определили базовый элемент, который будет использоваться для конструкции HFSM: привычка. А теперь, делая привычки достаточно зависящими от внешних данных, мы можем показать не только их ценность и установки для модификации, но также структуру действий, которые они позволяют выполнить. Каждая привычка самодостаточна. Все, что нужно, определено внутри нее самой: когда она может активироваться, когда ее выполнение нужно остановить, что ее прерывает и что делать при активации, деактивации и обновлении. Однако, что более важно, она определяет, какие дочерние процессы запускать. Каждое из этих свойств привычки устанавливается в файле привычки – по одному на привычку – который распознается и считывается остальными данными игры.
Как только привычка создана в состоянии очереди, ее задача – решить, когда можно активироваться согласно ее собственным требованиям активации. Эти требования определяются присоединенным к привычке списком объектов предусловий. Предусловие – это набор правил, которые могут оцениваться как истинные или ложные после проверки условий в мире. Игровые события, уровень здоровья персонажа и команды, которые дает лидер отряда – все они являются условиями, которые могут повлиять на активацию привычки, и предусловия могут быть сконфигурированы так, чтобы воспринимать любые из них.

Установки, которые определяют предусловия, хранятся в отдельном файле, и также могут использоваться неоднократно, как и привычки. Это позволило нам сконструировать библиотеку предусловий, которые легко выбирать для новой привычки, просто перечисляя их в конфигурационном файле привычки.
Как только привычка активирована, она может выполнять свое настоящее предназначение, которое в наиболее очевидных случаях также определяется входными данными. Любая привычка может запустить элемент для персонажа (проиграть анимацию, звук или эффект) или запустить еще дочерние процессы, не требуя никакого изменения кода, что дает нам невероятную гибкость в возможностях быстрого наполнения плотью структуры любой новой привычки. Для более комплексных действий мы использовали привычки с поддержкой кода.
Привычка с поддержкой кода позволяет все те же настройки конфигурации, что и привычки базового уровня, но с определенными добавлениями, которые передаются в соответствующий модуль, написанный в коде. «Выстрелить_из_оружия», «Следовать_пути» и «Рукопашный_бой» — примеры привычек, которые имеют кодовую часть, связанную с ними, которая выполняет те действия, что являются слишком специфическими, чтобы распространить их и сделать доступными для всех привычек. В «Выстрелить_из_оружия» мы, к примеру, имеем установки для «задержки между выстрелами» и «количества выстрелов для стрельбы очередью», которые были бы бесполезными для большинства других привычек. Эти привычки с поддержкой кода вписываются в дерево так же, как и все остальные, и обычно являются листьями HFSM, используясь на самом нижнем уровне как дочерние процессы более абстрактных привычек.
Как правило, роль высокоуровневых привычек в том, чтобы выделить объекты и задачи, которые нужно выполнить, а затем запустить дочерние процессы, чтобы это произошло. Однако, поскольку объекты, с которыми нам приходится иметь дело, не определены, пока игра не будет запущена (это, например, текущая цель персонажа в бою или последний, кто нанес вред игроку), нам нужен способ принимать решения и говорить о таких объектах в пределах наших привычек. Нам нужна система параметров.

Добавить комментарий