IBAction* IBActionLibrary::FindActionDef(IBFact* pFact) { ActionDefMap::iterator begin = m_oMap.begin(); ActionDefMap::iterator end = m_oMap.end(); ActionDefMap::iterator it; //IBAction* pBestAction = NULL; //float fBestValuate; for (it=begin ; it!=end ; ++it) { IBActionDef* pActionDef = it->second; for (uint i=0 ; i< pActionDef->GetPostCondDef().size() ; ++i) { IBFactDef* pFactDef = pActionDef->GetPostCondDef()[i].m_pFactDef; if (pFactDef->GetName() == pFact->GetFactDef()->GetName()) { IBAction* pAction = pActionDef->Instanciate(pFact); /* float fValue = pAction->Evaluate(); if (pBestAction == NULL) { pBestAction = pAction; fBestValuate = fValue; } else if (fValue > fBestValuate) { delete pBestAction; pBestAction = pAction; fBestValuate = fValue; } else { delete pBestAction; } break; */ } } } //return pBestAction; return NULL; }
void IBFact::Resolve(const IBPlanner* pPlanner) { const ActionDefSet& AllActionDef = pPlanner->GetActionLibrary().GetAllActionDef(); // For each Action in lib for (ActionDefSet::const_iterator it = AllActionDef.begin(); it != AllActionDef.end(); ++it) { IBActionDef* pActionDef = *it; if (IsResolvableBy(pActionDef)) { IBAction* pAction = pActionDef->Instanciate(this); AddCauseAction(pAction); } } }
IBActionDef* IBActionLibrary::FindActionDef(const string& factname) { ActionDefMap::iterator begin = m_oMap.begin(); ActionDefMap::iterator end = m_oMap.end(); ActionDefMap::iterator it; for (it=begin ; it!=end ; ++it) { IBActionDef* pActionDef = it->second; for (uint i=0 ; i< pActionDef->GetPostCondDef().size() ; ++i) { IBFactDef* pFactDef = pActionDef->GetPostCondDef()[i].m_pFactDef; if (pFactDef->GetName() == factname) { return pActionDef; } } } return NULL; }