本文主要记录一下kbe常用数据类型,数据类型的加载,数据类型的操作类等。
系统定义的数据类型有:
bool DataTypes::initialize(std::string file)
{
// 初始化一些基础类别
addDataType("UINT8", new IntType<uint8>);
addDataType("UINT16", new IntType<uint16>);
addDataType("UINT64", new UInt64Type);
addDataType("UINT32", new UInt32Type);
addDataType("INT8", new IntType<int8>);
addDataType("INT16", new IntType<int16>);
addDataType("INT32", new IntType<int32>);
addDataType("INT64", new Int64Type);
addDataType("STRING", new StringType);
addDataType("UNICODE", new UnicodeType);
addDataType("FLOAT", new FloatType);
addDataType("DOUBLE", new DoubleType);
addDataType("PYTHON", new PythonType);
addDataType("PY_DICT", new PyDictType);
addDataType("PY_TUPLE", new PyTupleType);
addDataType("PY_LIST", new PyListType);
addDataType("ENTITYCALL", new EntityCallType);
addDataType("BLOB", new BlobType);
addDataType("VECTOR2", new Vector2Type);
addDataType("VECTOR3", new Vector3Type);
addDataType("VECTOR4", new Vector4Type);
_g_baseTypeEndIndex = dataTypesOrders_.size();
return loadTypes(file);
}
用户自定义的数据类型,放在资源目录:kbengine_demos_assets-1.3.6\scripts\entity_defs\types.xml中,一般有数据别名
(就是把原有的系统类型定义一个方便记忆的别名,类似typedef),自定义数据类,以及脚本导出实例,
数据库存储长度等实现:
别名:
如BOOL = UINT8, <SKILLID> INT32 </SKILLID>(技能编号)
另外还有一种不定长,数组ARRAY,字典:FIXED_DICT(类)等定义。
ARRAY:
<ENTITY_FORBID_COUNTER> ARRAY <of> INT8 </of> </ENTITY_FORBID_COUNTER>
这里的ENTITY_FORBID_COUNTER为数组类型,每个元素为INT8,当然还可以定义数组嵌套,如:
ARRAY of ARRAY:
<ENTITY_INFO> ARRAY <of> ARRAY <of> INT8 </of> </of> </ENTITY_INFO>
这时ENTITY_INFO为数组,其中每个元素为INT8的数组。
FIXED_DICT:
<AVATAR_DATA> FIXED_DICT
<implementedBy>AVATAR_DATA.AVATAR_DATA_PICKLER</implementedBy>
<Properties>
<param1>
<Type> INT8 </Type>
</param1>
<param2>
<Type> BLOB </Type>
</param2>
</Properties>
</AVATAR_DATA>
AVATAR_DATA为自定义数据类型,必须在python文件中有一个导出实例(AVATAR_DATA_PICKLER,
就是implementedBy字段圆点后面的名字)。在Properties域中,记录了该类型的一些数据字段,好比类的一些成员变量:
param1=INT8, param2=BLOB,如果某个属性需要存储,可以增加<DatabaseLength> 256 </DatabaseLength>,表明字段放在数据库中需要的长度。
源码中的操作类:
#include "datatype.h" (实现了所有数据类型)
#include "datatypes.h" (静态类,管理系统中所有数据类型,包括types.xml中加载的)