//----------------------------------------------------------------------------
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;
}