void SceneManager::clearSceneObjMap(SceneObjectMap& map) { for (SceneObjectMap::iterator it = map.begin(); it != map.end(); ++it) { if (it->second) { delete it->second; } } map.clear(); }
void ParseScene(SceneObjectList& objList, const char *ScenePath) { objList.clear(); std::string line; RTextFile scenefile(ScenePath); K_LOG("ESceneParser -- Start parsing: %s",ScenePath); SceneObjectMap obj; while (scenefile.GetLine(line)) { ParseLine(obj,line); if (obj.size() > 0) objList.push_back(obj); } K_LOG("ESceneParser -- End parsing: %s",ScenePath); }
void ParseLine(SceneObjectMap& obj, std::string& line) { std::string key, value; obj.clear(); if (line[0] == '#') // suppress comment line return; const char *start = line.c_str(), *end, *last=line.c_str() + strlen(line.c_str()); while (start < last) { end = strchr(start,':'); if (end == NULL) break; key.assign(start,end); strip(key); start = end+1; end = strchr(start,'|'); if (end == NULL) end=last; value.assign(start,end); strip(value); start = end+1; obj[key] = value; } }
SceneObj* SceneManager::createSceneObj(const string& objName, const string& objClassName, const KeyValuePairStringMap* params) { SceneObj* factory = getSceneObjFactory(objClassName); assert(factory != NULL); ThreadSafeSceneObjMap* objMap = getSceneObjMap(objClassName); assert(objMap != NULL); SceneObj* obj = NULL; obj = factory->create(this, objName, params); assert(obj != NULL); obj->setSceneManager(this); SceneObjBaseNameMap::iterator iter = objMap->sceneObjs.find(objName); if (iter == objMap->sceneObjs.end()) { SceneObjectMap map; map.insert(SceneObjectMap::value_type(obj->getFullName(), obj)); objMap->sceneObjs.insert(SceneObjBaseNameMap::value_type(objName, map)); } else { iter->second.insert(SceneObjectMap::value_type(obj->getFullName(), obj)); } return obj; }