SimObject* findObject(const char* name) { PROFILE_SCOPE(SimFindObject); // Play nice with bad code - JDD if( !name ) return NULL; SimObject *obj; char c = *name; if (c == '%') { if (gEvalState.getStackDepth()) { Dictionary::Entry* ent = gEvalState.getCurrentFrame().lookup(StringTable->insert(name)); if (ent) return Sim::findObject(ent->getIntValue()); } } if(c == '/') return gRootGroup->findObject(name + 1 ); if(c >= '0' && c <= '9') { // it's an id group const char* temp = name + 1; for(;;) { c = *temp++; if(!c) return findObject(dAtoi(name)); else if(c == '/') { obj = findObject(dAtoi(name)); if(!obj) return NULL; return obj->findObject(temp); } } } S32 len; for(len = 0; name[len] != 0 && name[len] != '/'; len++) ; StringTableEntry stName = StringTable->lookupn(name, len); if(!stName) return NULL; obj = gNameDictionary->find(stName); if(!name[len]) return obj; if(!obj) return NULL; return obj->findObject(name + len + 1); }
SimObject *SimGroup::findObject(const char *namePath) { // find the end of the object name S32 len; for(len = 0; namePath[len] != 0 && namePath[len] != '/'; len++) ; StringTableEntry stName = StringTable->lookupn(namePath, len); if(!stName) return NULL; SimObject *root = mNameDictionary.find( stName ); if( !root ) return NULL; if(namePath[len] == 0) return root; return root->findObject(namePath + len + 1); }