Bazaar developer reference

CvAIOperationPureNavalCityAttack::ArmyInPosition(CvArmyAI *)

Defined in
CvAIOperation.cpp, line 4639
Class
CvAIOperationPureNavalCityAttack
Hook name
CivHooks::CvAIOperationPureNavalCityAttack_ArmyInPosition
Overrides
CvAINavalOperation::ArmyInPosition(CvArmyAI *)

Hooks

static bool BeforeCvAIOperationPureNavalCityAttack_ArmyInPosition(CvAIOperationPureNavalCityAttack* self, CvArmyAI* pArmy, bool& result);static void AfterCvAIOperationPureNavalCityAttack_ArmyInPosition(CvAIOperationPureNavalCityAttack* self, CvArmyAI* pArmy, bool& result);static bool ReplaceCvAIOperationPureNavalCityAttack_ArmyInPosition(bool (*original)(CvAIOperationPureNavalCityAttack*, CvArmyAI*), CvAIOperationPureNavalCityAttack* self, CvArmyAI* pArmy);CivRegisterBefore<CivHooks::CvAIOperationPureNavalCityAttack_ArmyInPosition>(host, &BeforeCvAIOperationPureNavalCityAttack_ArmyInPosition);CivRegisterAfter<CivHooks::CvAIOperationPureNavalCityAttack_ArmyInPosition>(host, &AfterCvAIOperationPureNavalCityAttack_ArmyInPosition);CivRegisterReplace<CivHooks::CvAIOperationPureNavalCityAttack_ArmyInPosition>(host, &ReplaceCvAIOperationPureNavalCityAttack_ArmyInPosition);

Code

4638/// Same as default version except if just gathered forces and this operation never reaches a final target (just keeps attacking until dead or the operation is ended)4639bool CvAIOperationPureNavalCityAttack::ArmyInPosition(CvArmyAI* pArmy)4640{4641	bool bStateChanged = false;46424643	switch(m_eCurrentState)4644	{4645		// If we were gathering forces, let's make sure a better target hasn't presented itself4646	case AI_OPERATION_STATE_GATHERING_FORCES:4647		{4648			// First do base case processing4649			bStateChanged = CvAIOperation::ArmyInPosition(pArmy);46504651			// Is target still under enemy control?4652			CvPlot* pTarget = GetTargetPlot();4653			if(pTarget->getOwner() != m_eEnemy)4654			{4655				m_eCurrentState = AI_OPERATION_STATE_ABORTED;4656				m_eAbortReason = AI_ABORT_TARGET_ALREADY_CAPTURED;4657			}4658		}4659		break;46604661		// See if within 2 spaces of our target, if so give control of these units to the tactical AI4662	case AI_OPERATION_STATE_MOVING_TO_TARGET:4663		{4664			if (plotDistance(pArmy->Plot()->getX(), pArmy->Plot()->getY(), GetTargetPlot()->getX(), GetTargetPlot()->getY()) < 2)4665			{4666				// Notify tactical AI to focus on this area4667				CvTemporaryZone zone;4668				zone.SetX(GetTargetPlot()->getX());4669				zone.SetY(GetTargetPlot()->getY());4670				zone.SetTargetType(AI_TACTICAL_TARGET_CITY);4671				zone.SetLastTurn(GC.getGame().getGameTurn() + GC.getAI_TACTICAL_MAP_TEMP_ZONE_TURNS());4672				GET_PLAYER(m_eOwner).GetTacticalAI()->AddTemporaryZone(zone);46734674				m_eCurrentState = AI_OPERATION_STATE_SUCCESSFUL_FINISH;4675			}4676		}4677		break;46784679		// In all other cases use base class version4680	case AI_OPERATION_STATE_ABORTED:4681	case AI_OPERATION_STATE_RECRUITING_UNITS:4682	case AI_OPERATION_STATE_AT_TARGET:4683		return CvAIOperation::ArmyInPosition(pArmy);4684		break;4685	};46864687	return bStateChanged;4688}

Calls