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); } }
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." ); } }