void XMLModelDefinitionSerializer::exportParticleSystems(ModelDefinitionPtr modelDef, TiXmlElement& modelElem)
{
	if (modelDef->mParticleSystems.size()) {
		TiXmlElement particleSystemsElem("particlesystems");

		for (ModelDefinition::ParticleSystemSet::const_iterator I = modelDef->mParticleSystems.begin(); I != modelDef->mParticleSystems.end(); ++I) {
			TiXmlElement particleSystemElem("particlesystem");
			particleSystemElem.SetAttribute("script", I->Script.c_str());
			if (!I->Direction.isNaN()) {
				TiXmlElement directionElem("direction");
				XMLHelper::fillElementFromVector3(directionElem, I->Direction);
				particleSystemElem.InsertEndChild(directionElem);
			}
			if (I->Bindings.size()) {
				TiXmlElement bindingsElem("bindings");

				for (ModelDefinition::BindingSet::const_iterator J = I->Bindings.begin(); J != I->Bindings.end(); ++J) {
					TiXmlElement bindingElem("binding");
					bindingsElem.SetAttribute("emittervar", J->EmitterVar);
					bindingsElem.SetAttribute("atlasattribute", J->AtlasAttribute);
					particleSystemElem.InsertEndChild(bindingsElem);
				}
			}
			particleSystemsElem.InsertEndChild(particleSystemElem);
		}
		modelElem.InsertEndChild(particleSystemsElem);
	}
}
예제 #2
0
void XMLJesusSerializer::saveBlueprintToFile(Carpenter::BluePrint* blueprint, const std::string& filename, const std::string& name)
{
	if (filename == "" || filename == "." || filename == "..") {
		return;
	}

	TiXmlDocument _XMLDoc;
	
	
	
	   
	try
	{
		//make sure the directory exists
		std::string dir = EmberServices::getSingleton().getConfigService().getHomeDirectory() + "/carpenter/blueprints";
		
		oslink::directory osdir(dir);

		if (!osdir) {
#ifdef __WIN32__
			mkdir((EmberServices::getSingleton().getConfigService().getHomeDirectory() + "carpenter").c_str());
			mkdir(dir.c_str());
#else 
			mkdir((EmberServices::getSingleton().getConfigService().getHomeDirectory() + "carpenter").c_str(), S_IRWXU);
			mkdir(dir.c_str(), S_IRWXU);
#endif
		}
	
	
	
	
		
		TiXmlElement elem("blueprint");
		elem.SetAttribute("startingblock", blueprint->getStartingBlock()->getName().c_str());
		elem.SetAttribute("name", name.c_str());
		
		TiXmlElement buildingBlocksElem("buildingblocks");
		//now iterate over all building blocks
		
		const std::vector< Carpenter::BuildingBlock*> bblocks = blueprint->getAttachedBlocks();
		
		std::vector< Carpenter::BuildingBlock*>::const_iterator I = bblocks.begin();
		std::vector< Carpenter::BuildingBlock*>::const_iterator I_end = bblocks.end();
		
		for (;I != I_end; ++I) {
			TiXmlElement buildingBlockElem("buildingblock");
			buildingBlockElem.SetAttribute("blocktype",  (*I)->getBuildingBlockSpec()->getName().c_str() );
			buildingBlockElem.SetAttribute("name", (*I)->getName().c_str());
			buildingBlocksElem.InsertEndChild(buildingBlockElem);
		}
		
		
		//iterate over the bindings
		TiXmlElement bindingsElem("bindings");
		
		const std::list< Carpenter::BuildingBlockBinding>* bindings = blueprint->getBindings();
		std::list< Carpenter::BuildingBlockBinding>::const_iterator J = bindings->begin();
		std::list< Carpenter::BuildingBlockBinding>::const_iterator J_end = bindings->end();
		
		for (;J != J_end; ++J) {
			TiXmlElement bindingElem("binding");
			bindingElem.SetAttribute("block1", (*J).getBlock1()->getName().c_str());
			bindingElem.SetAttribute("block2", (*J).getBlock2()->getName().c_str());
			const Carpenter::AttachPoint* point1 = (*J).getAttachPoint1();
			std::string point1Name = point1->getAttachPair()->getName() + "/" + point1->getName();
			const Carpenter::AttachPoint* point2 = (*J).getAttachPoint2();
			std::string point2Name = point2->getAttachPair()->getName() + "/" + point2->getName();
			bindingElem.SetAttribute("point1", point1Name.c_str());
			bindingElem.SetAttribute("point2", point2Name.c_str());
				
			bindingsElem.InsertEndChild(bindingElem);
				
		}
		
		elem.InsertEndChild(bindingsElem);
		elem.InsertEndChild(buildingBlocksElem);
		_XMLDoc.InsertEndChild(elem);

		_XMLDoc.SaveFile(filename.c_str());
	}
	catch (...)
	{
		S_LOG_FAILURE("An error occurred creating the document." );
	}

	

	
}