コード例 #1
0
bool SceneSerializer::DeserializeScene(IScene* scene, const std::string& fileName, 
			const std::string& refCollection/* = std::string("")*/, bool flushDataMan /*=false*/, bool flushScene/* = false*/)
{
	/*PxDataManSerializeOptions serialOptions = PxDataManSerializeOptions(PxDataManSerializeOptions::ALL,
	PxDataCollection, true, fileName);*/

	bool errorsDetected = false;

	if(flushDataMan)
		PhysXDataManager::GetSingletonPtr()->ReleaseAll();

	if(flushScene)
		scene->GetPhysXScene()->flushSimulation();

	errorsDetected = !PhysXSerializerWrapper::CreateSerializer();
	/*
	if(!errorsDetected)
	errorsDetected = !PhysXDataManager::GetSingletonPtr()->DeserializeData(serialOptions);

	if(!errorsDetected)
	errorsDetected = !PhysXSerializerWrapper::AddToScene(scene->GetPhysXScene(), PxDataCollection);*/

	if(!errorsDetected)
		errorsDetected = !PhysXSerializerWrapper::DeserializeFromBinary(fileName + "Actors.pbd", 
			ActorCollection, refCollection);

	//PhysXSerializerWrapper::CompleteCollection(ActorCollection, refCollection);

	//if(!errorsDetected)
	//	errorsDetected = !PhysXSerializerWrapper::AddToScene(scene->GetPhysXScene(), ActorCollection);
	
	XMLReader reader = XMLReader();

	errorsDetected = !reader.OpenFile(fileName + "Actors.xml");

	if(!errorsDetected)
	{
		std::string currName;

		do 
		{
			currName = reader.GetCurrentNodeName();

			if(currName == GameObjectNode)//If dissecting a game object
			{
				//try loading the object and if successful, add it to the scene
				SharedGameObject loadedObject = DeserializedGameObject(reader, scene);
				if(loadedObject)
				{
					scene->AddGameObject(loadedObject);
					loadedObject->Start();
				}
				else
					errorsDetected = true;
			}
		} while (reader.MoveToNextSiblingNode());
	}
	
	//PhysXSerializerWrapper::ReleaseCollection(ActorCollection);
	PhysXSerializerWrapper::DestroySerializer();
	
	return !errorsDetected;
}