Example #1
0
	bool Scene::SerializeObject(GameObjectPtr pObj, DataStream* pStream)
	{
		const std::string& name = pObj->GetName();
		pStream->WriteString(name);

		const math::Matrix44& local = pObj->GetLocalTransform();
		pStream->Write((void*)&local, sizeof(local));

		uint16 nCom = pObj->GetComponentCount();
		pStream->WriteInt16(nCom - 1);

		for(int i = 0; i < nCom; ++i)
		{
			GameObjectComponentPtr pCom = pObj->GetComponent(i);
			
			
			pStream->WriteString(pCom->GetName());
			
			if(false == pCom->Serialize(pStream))
			{
				logger() << "failed to save component: " << pCom->GetName() << "\n";
				return false;
			}
		}

		uint16 nChild = 0;

		GameObjectPtr pChild = pObj->GetFirstChild();

		while(pChild)
		{
			++nChild;
			pChild = pChild->GetNextNode();
		}

		pStream->WriteInt16(nChild);

		pChild = pObj->GetFirstChild();

		while(pChild)
		{
			if(false == SerializeObject(pChild, pStream))
			{
				return false;
			}
			pChild = pChild->GetNextNode();
		}

		return true;
	}