CvTacticalAI::AssignCoveringUnits(int)
- Defined in
- CvTacticalAI.cpp, line 10533
- Class
- CvTacticalAI
- Hook name
CivHooks::CvTacticalAI_AssignCoveringUnits
Hooks
static bool BeforeCvTacticalAI_AssignCoveringUnits(CvTacticalAI* self, int iNumUnitsRequiredToCover, bool& result);static void AfterCvTacticalAI_AssignCoveringUnits(CvTacticalAI* self, int iNumUnitsRequiredToCover, bool& result);static bool ReplaceCvTacticalAI_AssignCoveringUnits(bool (*original)(CvTacticalAI*, int), CvTacticalAI* self, int iNumUnitsRequiredToCover);CivRegisterBefore<CivHooks::CvTacticalAI_AssignCoveringUnits>(host, &BeforeCvTacticalAI_AssignCoveringUnits);CivRegisterAfter<CivHooks::CvTacticalAI_AssignCoveringUnits>(host, &AfterCvTacticalAI_AssignCoveringUnits);CivRegisterReplace<CivHooks::CvTacticalAI_AssignCoveringUnits>(host, &ReplaceCvTacticalAI_AssignCoveringUnits);
Code
10532/// Uses information from m_PotentialBlocks to make final assignments to block a hex (returns false if not possible)10533bool CvTacticalAI::AssignCoveringUnits(int iNumUnitsRequiredToCover)10534{10535 bool bChoseOne = true;1053610537 m_TemporaryBlocks.clear();10538 m_ChosenBlocks.clear();1053910540 while(bChoseOne)10541 {10542 bChoseOne = false;10543 m_NewlyChosen.clear();1054410545 // Loop through potential blocks looking for assignments we MUST make (only one possibility)10546 for(unsigned int iI = 0; iI < m_PotentialBlocks.size(); iI++)10547 {10548 CvBlockingUnit temp = m_PotentialBlocks[iI];1054910550 if(temp.GetNumChoices() == 1)10551 {10552 m_NewlyChosen.push_back(temp);10553 bChoseOne = true;10554 }10555 }1055610557 if(bChoseOne)10558 {10559 // Do we have the same unit in m_NewlyChosen twice?10560 if(HaveDuplicateUnit())10561 {10562 return false; // Not going to work10563 }10564 else10565 {10566 // Copy to final list10567 for(unsigned int jJ = 0; jJ < m_NewlyChosen.size(); jJ++)10568 {10569 m_ChosenBlocks.push_back(m_NewlyChosen[jJ]);10570 }1057110572 RemoveChosenUnits();1057310574 // Do we have enough units left to cover everything?10575 if(NumUniqueUnitsLeft() < (iNumUnitsRequiredToCover - (int)m_ChosenBlocks.size()))10576 {10577 return false;10578 }10579 }10580 }10581 }1058210583 return ChooseRemainingAssignments(iNumUnitsRequiredToCover, iNumUnitsRequiredToCover);10584}
Calls
BaseVector::clearBaseVector::operator[]BaseVector::sizeCvBlockingUnit::CvBlockingUnit- CvBlockingUnit::GetNumChoices() const
- CvTacticalAI::ChooseRemainingAssignments(int, int)
- CvTacticalAI::HaveDuplicateUnit()
- CvTacticalAI::NumUniqueUnitsLeft()
- CvTacticalAI::RemoveChosenUnits(int)
FStaticVector::push_back