Bazaar developer reference

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