diff options
Diffstat (limited to 'src/environment.cpp')
-rw-r--r-- | src/environment.cpp | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/src/environment.cpp b/src/environment.cpp index 0c6d829f5..001b53a40 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -646,27 +646,30 @@ public: = abm->getRequiredNeighbors(); for(std::set<std::string>::iterator i = required_neighbors_s.begin(); - i != required_neighbors_s.end(); i++){ - content_t c = ndef->getId(*i); - if(c == CONTENT_IGNORE) - continue; - aabm.required_neighbors.insert(c); + i != required_neighbors_s.end(); i++) + { + ndef->getIds(*i, aabm.required_neighbors); } // Trigger contents std::set<std::string> contents_s = abm->getTriggerContents(); for(std::set<std::string>::iterator - i = contents_s.begin(); i != contents_s.end(); i++){ - content_t c = ndef->getId(*i); - if(c == CONTENT_IGNORE) - continue; - std::map<content_t, std::list<ActiveABM> >::iterator j; - j = m_aabms.find(c); - if(j == m_aabms.end()){ - std::list<ActiveABM> aabmlist; - m_aabms[c] = aabmlist; + i = contents_s.begin(); i != contents_s.end(); i++) + { + std::set<content_t> ids; + ndef->getIds(*i, ids); + for(std::set<content_t>::const_iterator k = ids.begin(); + k != ids.end(); k++) + { + content_t c = *k; + std::map<content_t, std::list<ActiveABM> >::iterator j; j = m_aabms.find(c); + if(j == m_aabms.end()){ + std::list<ActiveABM> aabmlist; + m_aabms[c] = aabmlist; + j = m_aabms.find(c); + } + j->second.push_back(aabm); } - j->second.push_back(aabm); } } } |