CvTacticalAI::ScoreAssignments(bool)
- Defined in
- CvTacticalAI.cpp, line 11132
- Class
- CvTacticalAI
- Hook name
CivHooks::CvTacticalAI_ScoreAssignments
Hooks
static bool BeforeCvTacticalAI_ScoreAssignments(CvTacticalAI* self, bool bCanLeaveOpenings, int& result);static void AfterCvTacticalAI_ScoreAssignments(CvTacticalAI* self, bool bCanLeaveOpenings, int& result);static int ReplaceCvTacticalAI_ScoreAssignments(int (*original)(CvTacticalAI*, bool), CvTacticalAI* self, bool bCanLeaveOpenings);CivRegisterBefore<CivHooks::CvTacticalAI_ScoreAssignments>(host, &BeforeCvTacticalAI_ScoreAssignments);CivRegisterAfter<CivHooks::CvTacticalAI_ScoreAssignments>(host, &AfterCvTacticalAI_ScoreAssignments);CivRegisterReplace<CivHooks::CvTacticalAI_ScoreAssignments>(host, &ReplaceCvTacticalAI_ScoreAssignments);
Code
11131/// Score for this set of chosen blocks in m_TemporaryBlocks (-1 if illegal)11132int CvTacticalAI::ScoreAssignments(bool bCanLeaveOpenings)11133{11134 int iScore = 0;1113511136 // Any assignment appear twice?11137 for(unsigned int iI = 0; iI < m_TemporaryBlocks.size(); iI++)11138 {11139 for(unsigned int jJ = iI + 1; jJ < m_TemporaryBlocks.size(); jJ++)11140 {11141 if(m_TemporaryBlocks[iI].GetUnitID() == m_TemporaryBlocks[jJ].GetUnitID())11142 {11143 if(!bCanLeaveOpenings)11144 {11145 return -1;11146 }11147 else11148 {11149 // "Clear" the move with greater distance by setting it to MAX_INT distance11150 if(m_TemporaryBlocks[iI].GetDistanceToTarget() < m_TemporaryBlocks[jJ].GetDistanceToTarget())11151 {11152 m_TemporaryBlocks[jJ].SetDistanceToTarget(MAX_INT);11153 }11154 else11155 {11156 m_TemporaryBlocks[iI].SetDistanceToTarget(MAX_INT);11157 }11158 }11159 }11160 }11161 }1116211163 // Legal, so let's score it11164 for(unsigned int iI = 0; iI < m_TemporaryBlocks.size(); iI++)11165 {11166 if(m_TemporaryBlocks[iI].GetDistanceToTarget() != MAX_INT)11167 {11168 iScore += (10000 - (m_TemporaryBlocks[iI].GetDistanceToTarget() * 1000));11169 iScore += m_pPlayer->getUnit(m_TemporaryBlocks[iI].GetUnitID())->GetPower();11170 }11171 }1117211173 return iScore;11174}