Моя игра использует каркас компонентов сущностей и использует скрипты для определения сущностей (это напрямую не определяет поведение, я расскажу об этом подробнее в конце). Сценарии определяют фактические компоненты, которые будут использоваться для создания каждого объекта. Он использует простой язык сценариев, который я создал. Вот упрощенная версия одного из моих скриптов:
ENTITY:"Goblin"
{
description="It's currently their age."
commonname="goblin"
pluralCommonName="goblins"
childname="gob'in"
pluralChildName="gob'ins"
active=Nocturnal
tags=Mobile
baseAttributes="OrganicMobileCreature"
[Model]{
meshname="Goblin"
texturename="GoblinTexture"
}
[Motion]{
maxvelocity=0.01:0.015
locomotion=Walk,Swim
}
[Skills]{
ALL=0.01:0.05,Mine=8.3:8.8,PlaceCube=8.3:8.8
}
[Inventory]{
maxItems=2
Allow=ALL
Disallow=NONE
}
}
Многое из этого самоописывается, но вот некоторые основные моменты:
- Первый раздел описывает общую информацию для объекта. Это включает в себя описание и отображаемые имена для различных аспектов объекта.
- В
baseAttributes
ссылках тегов другой файл сценарий , который определяет общие компоненты , которые я не хочу , чтобы переопределить несколько раз. Он содержит такие компоненты , как position
, liferequirements
и так далее. Если какой-либо компонент определен здесь снова, этот компонент перезапишет общий.
- Каждый
[NAME] { }
набор определяет новый компонент, который будет добавлен к этим объектам.
- Это описание предназначено не только для одной сущности , но и для всех созданных гоблинов. Вы увидите, что некоторые значения имеют диапазоны (то есть
0.01:0.015
), когда создается новый гоблин, он создается с компонентом, который имеет случайное значение в этом диапазоне. Таким образом, у каждого гоблина будут немного разные навыки и немного разные скорости. Эта установка определяет, что все гоблины начнут с действительно хороших навыков размещения кубов и майнинга, что на самом деле только для моих собственных целей тестирования. Но, как я уверен, вы можете догадаться, очень легко изменить значения на то, что я хочу.
Все это включает в себя создание собственного синтаксического анализатора, какую-то структуру для хранения определений сущностей (я называю мой Лексикон!) И фабрику для получения этих определений сущностей и генерации новых сущностей. Для меня эта система все еще находится на ранних стадиях, но получается очень, очень хорошо. Это довольно мощная система для быстрого определения сущностей и позволяет создавать любые сущности, которые вы хотите, используя созданные вами компоненты. Если вам неудобно создавать свой собственный парсер, я думаю, XML будет работать нормально. Я конвертировал свой из рекурсивного синтаксического анализатора с возвратом назад, который я написал для немного выдуманного языка программирования.
Как видите, это определяет сущность. Я упомянул, что это не определяет поведение напрямую. Однако он может легко определить такие вещи, как ненавистные враги и то, как агрессивно реагировать на этих врагов. Это было бы так же просто, как определить любой компонент, который вы используете для управления таким поведением. Мои сущности также имеют компонент интеллекта (не показан), который определяет такие вещи, как:
- Как они находят путь (простое движение по линии прямой видимости, простое A *, прогнозирующее A * и т. Д.)
- Насколько они агрессивны / оборонительны. У сущностей могут быть домашние зоны, которые будут защищаться, но, возможно, не агрессивные вне этих зон.
- Технологическая осведомленность (открыть двери, использовать гаджеты, избегать ловушек и т. Д.)
- И более...
Как бы ни была определена ваша, именно ваша система будет управлять данными в этом компоненте, что, в свою очередь, влияет на поведение ваших сотрудников.