//--------------------------------------------------------------------- bool OverlayManager::parseChildren( DataStreamPtr& stream, const String& line, Overlay* pOverlay, bool isATemplate, OverlayContainer* parent) { bool ret = false; uint skipParam =0; vector<String>::type params = StringUtil::split(line, "\t\n ()"); if (isATemplate) { if (params[0] == "template") { skipParam++; // the first param = 'template' on a new child element } } // top level component cannot be an element, it must be a container unless it is a template if (params[0+skipParam] == "container" || (params[0+skipParam] == "element" && (isATemplate || parent != NULL)) ) { String templateName; ret = true; // nested container/element if (params.size() > 3+skipParam) { if (params.size() != 5+skipParam) { LogManager::getSingleton().logMessage( "Bad element/container line: '" + line + "' in " + parent->getTypeName()+ " " + parent->getName() + ", expecting ':' templateName", LML_CRITICAL); skipToNextCloseBrace(stream); // barf return ret; } if (params[3+skipParam] != ":") { LogManager::getSingleton().logMessage( "Bad element/container line: '" + line + "' in " + parent->getTypeName()+ " " + parent->getName() + ", expecting ':' for element inheritance", LML_CRITICAL); skipToNextCloseBrace(stream); // barf return ret; } templateName = params[4+skipParam]; } else if (params.size() != 3+skipParam) { LogManager::getSingleton().logMessage( "Bad element/container line: '" + line + "' in " + parent->getTypeName()+ " " + parent->getName() + ", expecting 'element type(name)'"); skipToNextCloseBrace(stream); // barf return ret; } skipToNextOpenBrace(stream); parseNewElement(stream, params[1+skipParam], params[2+skipParam], true, pOverlay, isATemplate, templateName, (OverlayContainer*)parent); } return ret; }
//----------------------------------------------------------------------- void ParticleSystemManager::parseScript(DataStreamPtr& stream, const String& groupName) { #if OGRE_USE_NEW_COMPILERS == 1 ScriptCompilerManager::getSingleton().parseScript(stream, groupName); #else // OGRE_USE_NEW_COMPILERS String line; ParticleSystem* pSys; std::vector<String> vecparams; pSys = 0; while(!stream->eof()) { line = stream->getLine(); // Ignore comments & blanks if (!(line.length() == 0 || line.substr(0,2) == "//")) { if (pSys == 0) { // No current system // So first valid data should be a system name if (StringUtil::startsWith(line, "particle_system ")) { // chop off the 'particle_system ' needed by new compilers line = line.substr(16); } pSys = createTemplate(line, groupName); pSys->_notifyOrigin(stream->getName()); // Skip to and over next { skipToNextOpenBrace(stream); } else { // Already in a system if (line == "}") { // Finished system pSys = 0; } else if (line.substr(0,7) == "emitter") { // new emitter // Get typename vecparams = StringUtil::split(line, "\t "); if (vecparams.size() < 2) { // Oops, bad emitter LogManager::getSingleton().logMessage("Bad particle system emitter line: '" + line + "' in " + pSys->getName()); skipToNextCloseBrace(stream); } skipToNextOpenBrace(stream); parseNewEmitter(vecparams[1], stream, pSys); } else if (line.substr(0,8) == "affector") { // new affector // Get typename vecparams = StringUtil::split(line, "\t "); if (vecparams.size() < 2) { // Oops, bad affector LogManager::getSingleton().logMessage("Bad particle system affector line: '" + line + "' in " + pSys->getName()); skipToNextCloseBrace(stream); } skipToNextOpenBrace(stream); parseNewAffector(vecparams[1],stream, pSys); } else { // Attribute parseAttrib(line, pSys); } } } } #endif // OGRE_USE_NEW_COMPILERS }