//---------------------------------------------------------------------------- int CDotSceneSerializer::RecurseReadObjects(TiXmlElement *parentelement,CBaseEditor* parentobject) { CBaseEditor *newobj; TiXmlElement* element = 0; Ogre::String eType; element = parentelement->FirstChildElement(); if(!element) return SCF_OK; do { newobj = 0; eType = element->Value(); if(eType == "node") { ReadSceneNode(element, parentobject, &newobj); int ret = RecurseReadObjects(element, newobj); if(ret != SCF_OK) return ret; NameObjectPairList& childlist = newobj->getChildren(); if(childlist.size() == 1) { CBaseEditor *childobj = childlist.begin()->second; childobj->setParent(newobj->getParent()); OgitorsPropertyValueMap vmapn = newobj->getProperties()->getValueMap(); OgitorsPropertyValueMap vmapo; OgitorsPropertyValueMap::iterator vit; vit = vmapn.find("autotracktarget"); vmapo.insert(OgitorsPropertyValueMap::value_type(vit->first, vit->second)); vit = vmapn.find("position"); vmapo.insert(OgitorsPropertyValueMap::value_type(vit->first, vit->second)); vit = vmapn.find("scale"); vmapo.insert(OgitorsPropertyValueMap::value_type(vit->first, vit->second)); vit = vmapn.find("orientation"); vmapo.insert(OgitorsPropertyValueMap::value_type(vit->first, vit->second)); OgitorsRoot::getSingletonPtr()->DestroyEditorObject(newobj); newobj = childobj; childobj->getProperties()->setValueMap(vmapo); } } else if(eType == "entity") ReadEntity(element, parentobject, &newobj); else if(eType == "subentities") ReadSubEntity(element, parentobject, &newobj); else if(eType == "light") ReadLight(element, parentobject, &newobj); else if(eType == "camera") ReadCamera(element, parentobject, &newobj); else if(eType == "particle") ReadParticle(element, parentobject, &newobj); else if(eType == "plane") ReadPlane(element, parentobject, &newobj); else continue; } while(element = element->NextSiblingElement()); return SCF_OK; }