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;
	}
Example #2
0
void CMainFrame::OnComponentMenu(UINT nID)
{
	using namespace engine;
	ExtPackage::ComponentClass* pClass = FindClassByMenuID(nID);

	GameObjectPtr pObj = Project::Instance()->GetSelObject();

	if(pObj->GetComponent(pClass->m_name) != GameObjectComponentPtr())
	{
		CString str = pClass->m_name.c_str() + CString(L" can only be added once per object");
		MessageBox(str, L"Component Error", MB_ICONERROR);
		return;
	}

	GameObjectComponentPtr pCom = Project::Instance()->CreateGameObjectComponent(pClass->m_name);

	pObj->AddComponent(pCom);

	UpdatePropGrid(pObj);
	return;
}