Воскресенье, 22.12.2024, 15:34

logo

Пользовательский поиск

Меню сайта
Категории раздела
Разное [13]
Tutorials
Создание моделей [2]
Создание карт [26]
Кодинг [24]
Форма входа
Наш сервер CS 1.6
Поиск
Наш опрос
Ваш возраст
Всего ответов: 268
Друзья сайта


Главная » Статьи » HL Source Development » Кодинг


Таблица описаний данных

Таблица описаний данных
Таблица описаний данных является репозиторием описаний членов классов: данных и функций, который позволяет движку связывать, сохранять/восстанавливать и иным способом понимать назначение этих членов. Неудачное описание этих членов в таблице может привести к непредвиденным результатам во время выполнения.
Элементы таблицы объявляются внутри блоков 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
);
Категория: Кодинг | Добавил: SuperStart (18.10.2010)
Просмотров: 1845 | Рейтинг: 0.0/0 |



Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright www.akksimo.net © 2024