Ru/Data Descriptions

Таблица описаний данных является репозиторием описаний членов классов: данных и функций, который позволяет движку связывать, сохранять/восстанавливать и иным способом понимать назначение этих членов. Неудачное описание этих членов в таблице может привести к непредвиденным результатам во время выполнения.
Элементы таблицы объявляются внутри блоков 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 	Строка движка которая является названием модели (должно быть кеширована)
FIELD_SOUNDNAME 	Строка движка которая является названием звука (должно быть кеширована)
FIELD_INPUT 	Список введенных полей данных, все наследованы от CMultiInputVar
FIELD_FUNCTION 	Указатель функции класса (Think, Use, и т.д.)
FIELD_VMATRIX 	VMatrix (Примечание: output координаты НЕ ЯВЛЯЮТСЯ мировыми)
FIELD_VMATRIX_WORLDSPACE 	VMatrix отображает некоторое локальное мировое пространство (автоматически фиксируется через переходы между уровнями)
FIELD_MATRIX3X4_WORLDSPACE	matrix3x4_t которая отображает некоторое локальное мировое пространство (автоматически фиксируется через переходы между уровнями)
FIELD_INTERVAL 	Начало диапазона с точечной запятой (например, 3.2->3.6 == 3.2 и 0.4 )
FIELD_MODELINDEX 	Индекс модели
FIELD_MATERIALINDEX 	Индекс материала (с использованием таблицы строк предзагрузки)
=DEFINE_KEYFIELD=
Этот макрос работает в такой же способ как DEFINE_FIELD который относится к сохранению и восстановлению данных членов. Он расширяет эту функциональность определяя кроме всего прочего ссылаемое имя для члена данных которое связано с его ключевым значением, идентификатор которого определен в записи FGD файла для класса энтити. Как только данное свойство объявляется, член данных инициализируется значением описанным в карте на момент создания этой энтити.
DEFINE_KEYFIELD( variableName, variableType, "keyvalueName" )
Для примера, нижеприведенное определение связывает член данных m_bEnabled с ключевым значением enabled идентификатора в Хаммере.
DEFINE_KEYFIELD( m_bEnabled, FIELD_BOOLEAN, "enabled" )
=DEFINE_OUTPUT=
Данный макрос используется для связи события вывода(output) с именованным идентификатором используемым в Хаммере. Он определяется так:
DEFINE_OUTPUT( outputVariable, outputName )
=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 AND 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_ENTITYFUNC=
Энтити использующие пользовательскую функцию должны объявить эту функцию через данный макрос.
Эти функции должны быть следующего типа:
 typedef void (CBaseEntity::*ENTITYFUNCPTR)(CBaseEntity *pOther );
=DEFINE_USEFUNC=
Энтити использующие пользовательскую функцию Use() должны объявлять эту функцию через данный макрос.
Эти функции должны быть следующего типа:
 typedef void (*UseFunc)(
 	CBaseEntity *pActivator,
 	CBaseEntity *pCaller,
 	USE_TYPE useType,
 	float value
 );
=Другие=
*dlls\simtimer.h
**DEFINE_SIMTIMER - Определяет 
*game_shared\physics_saverestore.h
**DEFINE_PHYSPTR - Определяет физические указатели
**DEFINE_PHYSPTR_ARRAY - Определяет массив физических указателей
*game_shared\saverestore_bitstring.h
**DEFINE_BITSTRING - Определяет , , или 
*game_shared\saverestore_utlmap.h
**DEFINE_UTLMAP - Определяет 
*game_shared\saverestore_utlrbtree.h
**DEFINE_UTLRBTREE - Определяет 
*game_shared\saverestore_utlvector.h
**DEFINE_UTLVECTOR - Определяет 
*game_shared\soundenvelope.h
**DEFINE_SOUNDPATCH
*public\saverestore.h
**DEFINE_KEYFIELD_NOT_SAVED
**DEFINE_ENTITY_FIELD
**DEFINE_ENTITY_GLOBAL_FIELD
**DEFINE_GLOBAL_FIELD
**DEFINE_GLOBAL_KEYFIELD
**DEFINE_CUSTOM_FIELD
**DEFINE_CUSTOM_KEYFIELD
**DEFINE_AUTO_ARRAY2D
**DEFINE_EMBEDDED
**DEFINE_EMBEDDED_OVERRIDE
**DEFINE_EMBEDDEDBYREF
**DEFINE_EMBEDDED_ARRAY
**DEFINE_EMBEDDED_AUTO_ARRAY
**DEFINE_PRED_TYPEDESCRIPTION
**DEFINE_PRED_TYPEDESCRIPTION_PTR
**DEFINE_PRED_FIELD
**DEFINE_PRED_ARRAY
**DEFINE_FIELD_NAME
**DEFINE_PRED_FIELD_TOL
**DEFINE_PRED_ARRAY_TOL
**DEFINE_FIELD_NAME_TOL
*public\stdstring.h
**DEFINE_STDSTRING
Category:Russian