Таблица описаний данных
Таблица описаний данных является репозиторием описаний членов классов: данных и функций, который позволяет движку связывать, сохранять/восстанавливать и иным способом понимать назначение этих членов. Неудачное описание этих членов в таблице может привести к непредвиденным результатам во время выполнения.
Элементы таблицы объявляются внутри блоков BEGIN_DATADESC и END_DATADESC. Любое количество следующих макросов могут быть помещены внутри таблицы как это потребуется, вот пример:
Ниже приводится список наиболее часто используемые типы элементов.
DEFINE_FIELD (variableName, variableType)
Параметр dataMemberType может быть любого из нижеприведенных типов:
DEFINE_FIELD (variableName, variableType, «keyvalueName»)
Для примера, нижеприведенное определение связывает член данных m_bEnabled с ключевым значением enabled идентификатора в Хаммере. DEFINE_FIELD (m_bEnabled, FIELD_BOOLEAN, «enabled»)
Примечание: значение ключевого значения не чуствительно к регистру.
DEFINE_OUTPUT (outputVariable, outputName)
Примечание: outputVariable в данном случае должно быть типом COuputEvent.
DEFINE_INPUTFUNC (parameterType, «inputName», InputFunction)
parameterType может быть одним из нижеперечисленных FIELD_ типов:
FIELD_VOID
FIELD_INTEGER
FIELD_FLOAT
FIELD_STRING
FIELD_VECTOR
FIELD_COLOR32
FIELD_BOOLEAN
DEFINE_INPUT (variableName, variableType, «keyvalueName»)
DEFINE_ARRAY
Как показывает их имена, эоти макросы взаимодействуют с сохранением и восстановлением значений массивов. Число элементов в массиве должно быть определено используя DEFINE_ARRAY, тогда как DEFINE_AUTO_ARRAY заставляет код автоматически определить размер массива во время выполнения программы.
Макросы определяются так:
DEFINE_ARRAY (variable, variableType, numElements)
DEFINE_AUTO_ARRAY (variable, variableType)
Класс-обработчик должен наследоваться от CClassPtrSaveRestoreOps; он использует функции Save () и Restore () для сериализации.
Для большей информации, смотрите использование CClassPtrSaveRestoreOps внутри кода.
Эти функции должны быть следующего типа:
typedef void (*ThinkFunc)(void);
Эти функции должны быть следующего типа:
typedef void (*UseFunc)(
CBaseEntity *pActivator,
CBaseEntity *pCaller,
USE_TYPE useType,
float value
);
Элементы таблицы объявляются внутри блоков BEGIN_DATADESC и END_DATADESC. Любое количество следующих макросов могут быть помещены внутри таблицы как это потребуется, вот пример:
BEGIN_DATADESC (CMyClass) DEFINE_FIELD (.. .) END_DATADESC () |
DEFINE_FIELD
Это макро определение используется для сохранения и загрузки в движке. Любая переменная свойства определеямая в этом макросе сохраняется и восстанавливается автоматически. Макрос объявляется так:DEFINE_FIELD (variableName, variableType)
Параметр dataMemberType может быть любого из нижеприведенных типов:
FIELD_VOID |
Нет типа или значения (используется для параметров функций) |
FIELD_FLOAT |
Любой вещественный тип |
FIELD_STRING |
Строковой ID (фозвращается из ALLOC_STRING) |
FIELD_VECTOR |
Любой вектор, QAngle, и AngularImpulse |
FIELD_QUATERNION |
Кватернион |
FIELD_INTEGER |
Любой целый или перечисления |
FIELD_BOOLEAN |
Булевое значение (представлено как целое) |
FIELD_SHORT |
2 байтовое целое |
FIELD_CHARACTER |
Один байт |
FIELD_COLOR32 |
8-бит на канал [R, G, B, A] (32-битный цвет) |
FIELD_EMBEDDED |
Встроенные объект с описанием данных, рекурсивно просматриваемый и встроенный класс/структура на основе дополнительного описания типа |
FIELD_CUSTOM |
Специальный тип который содержит указатели функции на функции чтения/записи/синтаксического анализа |
FIELD_CLASSPTR |
Указатель CBaseEntity |
FIELD_EHANDLE |
Дескриптор энтити |
FIELD_EDICT |
Указатель edict_t |
FIELD_POSITION_VECTOR |
Значение мировых координт, которое автоматически фиксируется через переходы между уровнями |
FIELD_TIME |
Вещественное значение времени, которое автоматически фиксируется через переходы между уровнями |
FIELD_TICK |
Целое значение счетчика, которое фиксировано подобно FIELD_TIME |
FIELD_MODELNAME |
Строка движка которая является названием модели (должно быть предзагружено (precached)) |
FIELD_SOUNDNAME |
Строка движка которая является названием звука (должно быть предзагружено (precached)) |
FIELD_INPUT |
Список введенных полей данных, все наследованы от CMultiInputVar |
FIELD_FUNCTION |
Указатель функции класса (Think, Use, |
FIELD_VMATRIX |
VMatrix (Примечание: output координаты НЕ ЯВЛЯЮТСЯ мировыми) |
FIELD_VMATRIX_WORLDSPACE |
VMatrix отображает некоторое локальное мировое пространство (автоматически фиксируется через переходы между уровнями) |
FIELD_MATRIX3X4_WORLDSPACE |
matrix3x4_t которая отображает некоторое локальное мировое пространство (автоматически фиксируется через переходы между уровнями) |
FIELD_INTERVAL |
AНачало диапазона с точечной запятой (например, 3.2->3.6 == 3.2 и 0.4) |
FIELD_MODELINDEX |
Индекс модели |
FIELD_MATERIALINDEX |
Индекс материала (с использованием таблицы строк предзагрузки) |
DEFINE_KEYFIELD
Этот макрос работает в такой же способ как DEFINE_FIELD который относится к сохранению и восстановлению данных членов. Он расширяет эту функциональность определяя кроме всего прочего ссылаемое имя для члена данных которое связано с его ключевым значением, идентификатор которого определен в записи FGD файла для класса энтити. Как только данное свойство объявляется, член данных инициализируется значением описанным в карте на момент создания этой энтити.DEFINE_FIELD (variableName, variableType, «keyvalueName»)
Для примера, нижеприведенное определение связывает член данных m_bEnabled с ключевым значением enabled идентификатора в Хаммере. DEFINE_FIELD (m_bEnabled, FIELD_BOOLEAN, «enabled»)
Примечание: значение ключевого значения не чуствительно к регистру.
DEFINE_OUTPUT
Данный макрос используется для связи события вывода (output) с именованным идентификатором используемым в Хаммере. Он определяется так:DEFINE_OUTPUT (outputVariable, outputName)
Примечание: outputVariable в данном случае должно быть типом COuputEvent.
DEFINE_INPUTFUNC
Данный макрос используется для связи именованых вводов (inputs) в Хаммере с функциями движка. Также он описывает тип параметра передаваемого функции от системы ввода/вывода энтитей. Макрос определяется так:DEFINE_INPUTFUNC (parameterType, «inputName», InputFunction)
parameterType может быть одним из нижеперечисленных FIELD_ типов:
FIELD_VOID
FIELD_INTEGER
FIELD_FLOAT
FIELD_STRING
FIELD_VECTOR
FIELD_COLOR32
FIELD_BOOLEAN
DEFINE_INPUT
Данный макрос урезанная версия DEFINE_INPUTFUNC. Он автоматически устаналивает описанный член данных к параметру полученному от функции Input (). Эти упрощения нужны для создания input-функции у которой единственное назначение — установить член данных в указзаное значение. Макрос определяется так:DEFINE_INPUT (variableName, variableType, «keyvalueName»)
DEFINE_ARRAY
DEFINE_AUTO_ARRAY
Как показывает их имена, эоти макросы взаимодействуют с сохранением и восстановлением значений массивов. Число элементов в массиве должно быть определено используя DEFINE_ARRAY, тогда как DEFINE_AUTO_ARRAY заставляет код автоматически определить размер массива во время выполнения программы.Макросы определяются так:
DEFINE_ARRAY (variable, variableType, numElements)
DEFINE_AUTO_ARRAY (variable, variableType)
DEFINE_CUSTOM_FIELD
Данный макрос позволяет произвольную интерпретацию переменной с описанием того как будет произведиться сохранение/восстановелние. Передавая ссылку на класс-обработчик, пользователь может полностью управлять сериализацией данных.Класс-обработчик должен наследоваться от CClassPtrSaveRestoreOps; он использует функции Save () и Restore () для сериализации.
Для большей информации, смотрите использование CClassPtrSaveRestoreOps внутри кода.
DEFINE_THINKFUNC
Энтити использующие функцию Think () должны объявлять эту функцию через данный макрос.Эти функции должны быть следующего типа:
typedef void (*ThinkFunc)(void);
DEFINE_USEFUNC
Энтити использующие функцию Use () должны объявлять эту функцию через данный макрос.Эти функции должны быть следующего типа:
typedef void (*UseFunc)(
CBaseEntity *pActivator,
CBaseEntity *pCaller,
USE_TYPE useType,
float value
);