ARSceneGroup* ARGroupManager::AddGroup(ARGroup* group)
{
	ARSceneGroup* ret = GetGroupListByID(group->groupID);
	if (ret)
	{
 		_UpdateGroup(ret, group);
 		return  ret;
	}
	ret = new ARSceneGroup();
	ret->group = 0;
	for (int i = 0; i < group->objects.size(); ++i)
	{
		scene::IRenderable* r=0;
		switch (group->objects[i]->objectType)
		{
		case EARObjectType::EARMesh:
			r = GenerateMeshObject((ARMesh*)group->objects[i]);
			break;
		case EARObjectType::EARPredef:
			r = LoadMeshObject((ARPredef*)group->objects[i]);
			break;
		case EARObjectType::EARString:
			r = LoadStringObject((ARString*)group->objects[i]);
			break;
		case EARObjectType::EARVehicle:
			r = LoadVehicleObject((ARVehicle*)group->objects[i]);
		default:
			break;
		}


		scene::ISceneNode* sceneNode = m_sceneManager->createSceneNode("ARObject@" + core::StringConverter::toString(group->groupID) + "#" + core::StringConverter::toString(i));

		if (group->objects[i]->objectType == EARObjectType::EARVehicle)
			m_vehicle = sceneNode;

		if (r)
			sceneNode->AttachNode(r);

		if (m_arRoot)
			m_arRoot->addChild(sceneNode);

	//	sceneNode->setCullingType(scene::SCT_NONE);
		sceneNode->setDrawBoundingBox(true);
		ARSceneObject* obj = new ARSceneObject;
		obj->id = group->objects[i]->id;
		obj->obj = 0; //later will be updated
		obj->sceneNode = sceneNode;
		ret->objects[obj->id]=(obj);
	}
	_UpdateGroup(ret, group);
	m_groups[group->groupID] = ret;
	return ret;
}
Ejemplo n.º 2
0
void CFileLoader::LoadObjectTypes(const char *filename)
{
    int fp = CFileMgr::OpenFile(filename, "rb");
    const char* line;
    int32_t path;
    size_t in_section = 0; /* section id */
    struct 
    {
        size_t section;
        char name[5];
    } sections[] = 
    {
        {0, "end"},
        {1, "objs"},
        {2, "tobj"},
        {3, "weap"},
        {4, "hier"},
        {5, "anim"},
        {6, "cars"},
        {7, "peds"}, 
        {8, "path"},
        {9, "2dfx"},
        {10,"txdp"}
    };
    while ((line = CFileLoader::LoadLine(fp)))
    {
        /* skip empty lines and comments */
        if (line[0] == '\0' || line[0] == '#')
        {
            continue;
        }
        if (in_section == 0)
        {
            for (size_t i = 0; i < ELEMS_COUNT(sections); i++)
            {
                if (!strncmp(line, sections[i].name, strlen(sections[i].name)))
                {
                    in_section = sections[i].section;
                }
            }
            /* if we changed section skip the current line which only denotes section name */
            if (in_section != 0)
            {
                line = CFileLoader::LoadLine((int)fp);
            }
        }
        switch (in_section)
        {
            case 1:
                LoadObject(line);
            break;
            case 2:
                LoadTimeObject();
            break;
            case 3:
                LoadWeaponObject();
            break;
            case 4:
                LoadClumpObject();
            break;
            case 5:
                LoadAnimatedClumpObject();
            break;
            case 6:
                LoadVehicleObject();
            break;
            case 7:
                LoadPedObject();
            break;
            case 8:
                static size_t path_type = -1;
                if (path == -1)
                {
                    path = 0;
                    LoadPathHeader(line, &path_type);
                }
                else
                {
                    switch (path_type)
                    {
                        case 0:
                            LoadPedPathNode();
                        break;
                        case 1:
                            LoadCarPathNode();
                        break;
                        case 2:
                            LoadCarPathNode();
                        break;
                    }
                    path++;
                    if (path == 12)
                    {
                        path = -1;
                    }
                }
            break;
            case 9:
                Load2dEffect();
            break;
            case 10:
                LoadTXDParent();
            break;
            default:
                continue;
            break;
        }
    }
    CFileMgr::CloseFile(fp);
}