bool Scene::UnSerializeObject(GameObjectPtr pObj, DataStream* pStream) { std::string name; pStream->ReadString(name); pObj->SetName(name); math::Matrix44 local; pStream->Read(&local, sizeof(local)); pObj->SetLocalTransform(local); uint16 nCom = 0; nCom = pStream->ReadInt16(); for(uint16 i = 0; i < nCom; ++i) { std::string comName; pStream->ReadString(comName); GameObjectComponentPtr pCom = m_pObjectManager->CreateComponent(comName); if(pCom == nullptr) { logger() << "failed to create component: " << comName << "\n"; return false; } pObj->AddComponent(pCom); if(false == pCom->UnSerialize(pStream)) { logger() << "failed to load component: " << comName << "\n"; return false; } } uint16 nChild = 0; nChild = pStream->ReadInt16(); for(uint16 i = 0; i < nChild; ++i) { GameObjectPtr pChild = m_pObjectManager->CreateGameObject(""); if(false == UnSerializeObject(pChild, pStream)) { pChild->Clear(); pChild.reset(); return false; } pChild->LinkTo(pObj); } return true; }