CvAIOperationBasicCityAttack::ArmyInPosition(CvArmyAI *)
- Defined in
- CvAIOperation.cpp, line 2172
- Class
- CvAIOperationBasicCityAttack
- Hook name
CivHooks::CvAIOperationBasicCityAttack_ArmyInPosition- Overrides
- CvAIOperation::ArmyInPosition(CvArmyAI *)
Hooks
static bool BeforeCvAIOperationBasicCityAttack_ArmyInPosition(CvAIOperationBasicCityAttack* self, CvArmyAI* pArmy, bool& result);static void AfterCvAIOperationBasicCityAttack_ArmyInPosition(CvAIOperationBasicCityAttack* self, CvArmyAI* pArmy, bool& result);static bool ReplaceCvAIOperationBasicCityAttack_ArmyInPosition(bool (*original)(CvAIOperationBasicCityAttack*, CvArmyAI*), CvAIOperationBasicCityAttack* self, CvArmyAI* pArmy);CivRegisterBefore<CivHooks::CvAIOperationBasicCityAttack_ArmyInPosition>(host, &BeforeCvAIOperationBasicCityAttack_ArmyInPosition);CivRegisterAfter<CivHooks::CvAIOperationBasicCityAttack_ArmyInPosition>(host, &AfterCvAIOperationBasicCityAttack_ArmyInPosition);CivRegisterReplace<CivHooks::CvAIOperationBasicCityAttack_ArmyInPosition>(host, &ReplaceCvAIOperationBasicCityAttack_ArmyInPosition);
Code
2171/// Same as default version except if just gathered forces, check to see if a better target has presented itself2172bool CvAIOperationBasicCityAttack::ArmyInPosition(CvArmyAI* pArmy)2173{2174 bool bStateChanged = false;21752176 switch(m_eCurrentState)2177 {2178 // If we were gathering forces, let's make sure a better target hasn't presented itself2179 case AI_OPERATION_STATE_GATHERING_FORCES:2180 {2181 // First do base case processing2182 bStateChanged = CvAIOperation::ArmyInPosition(pArmy);21832184 // Is target still under enemy control?2185 CvPlot* pTarget = GetTargetPlot();2186 if(pTarget->getOwner() != m_eEnemy)2187 {2188 m_eCurrentState = AI_OPERATION_STATE_ABORTED;2189 m_eAbortReason = AI_ABORT_TARGET_ALREADY_CAPTURED;2190 }2191 }2192 break;21932194 // See if reached our target, if so give control of these units to the tactical AI2195 case AI_OPERATION_STATE_MOVING_TO_TARGET:2196 {2197 CvPlot *pCenterOfMass = pArmy->GetCenterOfMass(DOMAIN_LAND);21982199 // Are we within tactical range of our target?2200 if(pCenterOfMass && plotDistance(pCenterOfMass->getX(), pCenterOfMass->getY(), m_iTargetX, m_iTargetY) <= GC.getAI_OPERATIONAL_CITY_ATTACK_DEPLOY_RANGE())2201 {2202 // Notify Diplo AI we're in place for attack2203 GET_PLAYER(GetOwner()).GetDiplomacyAI()->SetMusteringForAttack(GetEnemy(), true);22042205 // Notify tactical AI to focus on this area2206 CvTemporaryZone zone;2207 zone.SetX(GetTargetPlot()->getX());2208 zone.SetY(GetTargetPlot()->getY());2209 zone.SetTargetType(AI_TACTICAL_TARGET_CITY);2210 zone.SetLastTurn(GC.getGame().getGameTurn() + GC.getAI_TACTICAL_MAP_TEMP_ZONE_TURNS());2211 GET_PLAYER(m_eOwner).GetTacticalAI()->AddTemporaryZone(zone);22122213 m_eCurrentState = AI_OPERATION_STATE_SUCCESSFUL_FINISH;2214 }2215 }2216 break;22172218 // In all other cases use base class version2219 case AI_OPERATION_STATE_ABORTED:2220 case AI_OPERATION_STATE_RECRUITING_UNITS:2221 case AI_OPERATION_STATE_AT_TARGET:2222 return CvAIOperation::ArmyInPosition(pArmy);2223 break;2224 };22252226 return bStateChanged;2227}
Calls
- CvAIOperation::ArmyInPosition(CvArmyAI *)
- CvAIOperation::GetEnemy() const
- CvAIOperation::GetOwner() const
- CvAIOperation::GetTargetPlot() const
- CvArmyAI::GetCenterOfMass(DomainTypes)
- CvDiplomacyAI::SetMusteringForAttack(PlayerTypes, bool)
- CvGame::getGameTurn()
- CvGlobals::getAI_OPERATIONAL_CITY_ATTACK_DEPLOY_RANGE()
- CvGlobals::getAI_TACTICAL_MAP_TEMP_ZONE_TURNS()
- CvGlobals::getGame()
- CvPlayer::GetDiplomacyAI() const
- CvPlayer::GetTacticalAI() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getOwner() const
- CvPlot::getX() const
- CvPlot::getY() const
- CvTacticalAI::AddTemporaryZone(CvTemporaryZone)
CvTemporaryZone::CvTemporaryZone- CvTemporaryZone::CvTemporaryZone()
- CvTemporaryZone::SetLastTurn(int)
- CvTemporaryZone::SetTargetType(AITacticalTargetType)
- CvTemporaryZone::SetX(int)
- CvTemporaryZone::SetY(int)
- plotDistance(int, int, int, int)