//----------------------------------------------------------------------- void System::clearStaticGeometries(void) { std::list<Ogre::StaticGeometry*>::const_iterator it; for (it = mStaticGeometries.begin(); it != mStaticGeometries.end(); ++it) { Ogre::StaticGeometry* sg = *it; getSceneManager()->destroyStaticGeometry(sg->getName()); } mStaticGeometries.clear(); }
bool LevelGeometryLoader::processStaticGeometries(TiXmlElement *XMLRoot) { ASSERT(XMLRoot); TiXmlElement *pElement, *auxPElem; // Process nodes (?) pElement = XMLRoot->FirstChildElement("staticGeometries"); if(!pElement){ debug("Error: Invalid .scene processStaticGeometries\n" ); return false; } mStaticGeometry.clear(); Ogre::StaticGeometry *sgeo = 0; Ogre::Vector3 origin; Ogre::Vector3 dimension; bool visible; Ogre::String name; bool castShadow; // parse the staticGeometries pElement = pElement->FirstChildElement("staticGeometry"); while(pElement) { // Parse a StaticGeometry visible = Ogre::DotSceneLoader::getAttribBool(pElement, "visible"); name = Ogre::DotSceneLoader::getAttrib(pElement, "name"); castShadow = Ogre::DotSceneLoader::getAttribBool(pElement, "castShadows"); try { sgeo = Common::GlobalObjects::sceneManager->createStaticGeometry(name); debug("StaticGeometry %s created\n", name.c_str()); } catch(...) { debug("Error: Invalid name to StaticGeometry\n" ); return false; } mStaticGeometry.push_back(sgeo); sgeo->setCastShadows(castShadow); sgeo->setVisible(visible); // get the origin auxPElem = pElement->FirstChildElement("origin"); if(auxPElem) { sgeo->setOrigin(Ogre::DotSceneLoader::parseVector3(auxPElem)); } // get the dimensions auxPElem = pElement->FirstChildElement("dimensions"); if(auxPElem) { sgeo->setRegionDimensions(Ogre::DotSceneLoader::parseVector3(auxPElem)); } // iterate over the entity list auxPElem = pElement; auxPElem = auxPElem->FirstChildElement("entities"); if(!auxPElem){ debug("Error: StaticGeometry without Entity! %s\n", sgeo->getName().c_str()); ASSERT(false); mStaticGeometry.erase(mStaticGeometry.end()-1); Common::GlobalObjects::sceneManager->destroyStaticGeometry(sgeo); pElement = pElement->NextSiblingElement("staticGeometry"); continue; } auxPElem = auxPElem->FirstChildElement("entity"); while(auxPElem){ // get the entities associated if(!processEntityStaticGeoemtry(auxPElem, sgeo)){ debug("Error: Invalid entity of StaticGeometry\n" ); return false; } auxPElem = auxPElem->NextSiblingElement("entity"); } // build the staticGeometry sgeo->build(); pElement = pElement->NextSiblingElement("staticGeometry"); } return true; }