Bazaar developer reference

CvTacticalAI::IdentifyPriorityTargetsByType()

Defined in
CvTacticalAI.cpp, line 6017
Class
CvTacticalAI
Hook name
CivHooks::CvTacticalAI_IdentifyPriorityTargetsByType

Hooks

static bool BeforeCvTacticalAI_IdentifyPriorityTargetsByType(CvTacticalAI* self);static void AfterCvTacticalAI_IdentifyPriorityTargetsByType(CvTacticalAI* self);static void ReplaceCvTacticalAI_IdentifyPriorityTargetsByType(void (*original)(CvTacticalAI*), CvTacticalAI* self);CivRegisterBefore<CivHooks::CvTacticalAI_IdentifyPriorityTargetsByType>(host, &BeforeCvTacticalAI_IdentifyPriorityTargetsByType);CivRegisterAfter<CivHooks::CvTacticalAI_IdentifyPriorityTargetsByType>(host, &AfterCvTacticalAI_IdentifyPriorityTargetsByType);CivRegisterReplace<CivHooks::CvTacticalAI_IdentifyPriorityTargetsByType>(host, &ReplaceCvTacticalAI_IdentifyPriorityTargetsByType);

Code

6016/// Mark units that we'd like to make opportunity attacks on because of their unit type (e.g. catapults)6017void CvTacticalAI::IdentifyPriorityTargetsByType()6018{6019	// Look through all the enemies we can see6020	for(unsigned int iI = 0; iI < m_AllTargets.size(); iI++)6021	{6022		// Don't consider units that are already medium priority6023		if(m_AllTargets[iI].GetTargetType() == AI_TACTICAL_TARGET_HIGH_PRIORITY_UNIT ||6024		        m_AllTargets[iI].GetTargetType() == AI_TACTICAL_TARGET_LOW_PRIORITY_UNIT)6025		{6026			// Ranged units will always be medium priority targets6027			CvUnit* pUnit = (CvUnit*)m_AllTargets[iI].GetAuxData();6028			if(pUnit->IsCanAttackRanged())6029			{6030				m_AllTargets[iI].SetTargetType(AI_TACTICAL_TARGET_MEDIUM_PRIORITY_UNIT);6031			}6032		}60336034		// Don't consider units that are already high priority6035		if(m_AllTargets[iI].GetTargetType() == AI_TACTICAL_TARGET_MEDIUM_PRIORITY_UNIT ||6036		        m_AllTargets[iI].GetTargetType() == AI_TACTICAL_TARGET_LOW_PRIORITY_UNIT)6037		{6038			// Units defending citadels will always be high priority targets6039			CvUnit* pUnit = (CvUnit*)m_AllTargets[iI].GetAuxData();6040			ImprovementTypes eImprovement = pUnit->plot()->getImprovementType();6041			if(pUnit->plot()->getOwner() == pUnit->getOwner() &&6042			        eImprovement != NO_IMPROVEMENT && GC.getImprovementInfo(eImprovement)->GetNearbyEnemyDamage() > 0)6043			{6044				m_AllTargets[iI].SetTargetType(AI_TACTICAL_TARGET_HIGH_PRIORITY_UNIT);6045			}6046		}6047	}6048}

Calls

Called by