Bazaar developer reference

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

Called by