Моя гра використовує структуру компонентів сутності та використовує скрипти для визначення сутності (це не визначає безпосередньо поведінку, я розповім про це в кінці). Сценарії визначають фактичні компоненти, які будуть використані для створення кожної сутності. Він використовує просту мову сценаріїв, яку я створив. Ось спрощена версія одного з моїх сценаріїв:
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
), коли створюється новий гоблін, він створюється з компонентом, який має випадкове значення в цьому діапазоні. Тож кожен гоблін матиме дещо різні навички та трохи різну швидкість. Цей параметр визначає, що всі гобліни почнуть із справді хороших навичок розміщення кубів та видобутку, що справді лише для моїх власних цілей тестування. Але, як я впевнений, ви можете здогадатися, змінити значення на те, що я хочу, дуже легко.
Вся ця річ включає створення індивідуального аналізатора, якоїсь структури для визначення визначень сутності (я називаю мій Lexicon!) Та фабрику для прийняття цих визначень і створення нових сутностей. Для мене ця система ще знаходиться на ранній стадії, але виходить дуже, дуже добре. Це досить потужна система для швидкого визначення об'єктів і дозволяє зробити будь-яку сутність, яку ви хочете, використовуючи створені вами компоненти. Якщо вам не зручно створювати власний парсер, я думаю, що XML буде працювати чудово. Я перетворив шахту з рекурсивного синтаксичного аналізатора, який я написав для трохи складеної мови програмування.
Як бачимо, це визначає сутність. Я зазначив, що це не визначає безпосередньо поведінку. Однак можна легко визначити такі речі як ненависні вороги та як агресивно реагувати на вказаних ворогів. Це було б так само просто, як визначити, який компонент ви використовуєте для контролю такої поведінки. Мої сутності також мають інтелектуальний компонент (не показаний), який визначає такі речі, як:
- Як вони знаходять шлях (простий рух в огляді, простий A *, передбачувальний A * тощо)
- Наскільки вони агресивні / захисні. Суб'єкти можуть мати домашні зони, які захищатимуться, але, можливо, не будуть агресивними поза цими зонами.
- Поінформованість про технології (відкривати двері, користуватися гаджетами, уникати пасток тощо)
- І більше...
Однак ваша визначена, саме ваша система буде керувати даними в цьому компоненті, що, в свою чергу, впливає на поведінку ваших даних.