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
BaseVector::operator[]BaseVector::size- CvGlobals::getImprovementInfo(ImprovementTypes)
- CvImprovementEntry::GetNearbyEnemyDamage() const
- CvPlot::getImprovementType() const
- CvPlot::getOwner() const
- CvTacticalTarget::GetAuxData()
- CvTacticalTarget::GetTargetType()
- CvTacticalTarget::SetTargetType(AITacticalTargetType)
- CvUnit::getOwner() const
- CvUnit::IsCanAttackRanged() const
- CvUnit::plot() const