An IGameObject
is a scene entity with relevant properties. IGameObject
defines the type of object, whether a camera, a lights etc. IGameNode
is the container for IGameObject
s. The developer must then cast the object to its correct interface, as shown in the following code from the IGameExporter
sample (edited for clarity):
//child is an IGameNode pointer
IGameObject * obj = child->GetIGameObject();
switch(obj->GetIGameType())
{
case IGameObject::IGAME_MESH:
if(exportGeom )
{
IGameMesh * gM = (IGameMesh*)obj;
if(gM->InitializeData())
{
DumpMesh(gM,geomData);
}
else
{
DebugPrint("BadObject\n")
}
}
break;
case IGameObject::IGAME_SPLINE:
if(exportSplines)
{
IGameSpline * sp = (IGameSpline*)obj;
sp->InitializeData();
DumpSpline(sp,splineData);
}
break;
}
child->ReleaseIGameObject();
In the above example, we call IGameObject::GetIGameType()
and cast the IGameObject
to its associated interface. The following table is a list of IGameObject
types and their associated interfaces:
IGame Object Type | IGame Interface |
IGAME_UNKNOWN | IGameGenObject |
IGAME_LIGHT | IGameLight |
IGAME_MESH | IGameMesh |
IGAME_SPLINE | IGameSpline |
IGAME_CAMERA | IGameCamera |
IGAME_HELPER | IGameHelperObject |
IGAME_BONE | IGameHelperObject |
IGAME_IKCHAIN | IGameIKChain |
IGAME_XREF | IGameXRefObject |
To preserve memory, IGameObject
has an InitializeData()
method which instructs the 3DXI system to start the actual object conversion. Objects such as editable meshes can consume much memory, so this conversion happens only at the request of the developer. For example: in the case that only the simple node transformation data is required, you do not need to call InitializeData()
.