Bazaar developer reference

CvAIOperationNavalBombardment::FindBestTarget()

Defined in
CvAIOperation.cpp, line 4083
Class
CvAIOperationNavalBombardment
Hook name
CivHooks::CvAIOperationNavalBombardment_FindBestTarget
Overrides
CvAINavalOperation::FindBestTarget()

Hooks

static bool BeforeCvAIOperationNavalBombardment_FindBestTarget(CvAIOperationNavalBombardment* self, CvPlot*& result);static void AfterCvAIOperationNavalBombardment_FindBestTarget(CvAIOperationNavalBombardment* self, CvPlot*& result);static CvPlot* ReplaceCvAIOperationNavalBombardment_FindBestTarget(CvPlot* (*original)(CvAIOperationNavalBombardment*), CvAIOperationNavalBombardment* self);CivRegisterBefore<CivHooks::CvAIOperationNavalBombardment_FindBestTarget>(host, &BeforeCvAIOperationNavalBombardment_FindBestTarget);CivRegisterAfter<CivHooks::CvAIOperationNavalBombardment_FindBestTarget>(host, &AfterCvAIOperationNavalBombardment_FindBestTarget);CivRegisterReplace<CivHooks::CvAIOperationNavalBombardment_FindBestTarget>(host, &ReplaceCvAIOperationNavalBombardment_FindBestTarget);

Code

4082/// Find the barbarian camp we want to eliminate4083CvPlot* CvAIOperationNavalBombardment::FindBestTarget()4084{4085	int iPlotLoop, iDirectionLoop;4086	CvPlot* pBestPlot = NULL;4087	CvPlot* pPlot;4088	CvPlot* pAdjacentPlot;4089	int iBestTurns = MAX_INT;4090	int iCurrentTurns;4091	CvUnit* pInitialUnit;40924093	CvPlayer& owningPlayer = GET_PLAYER(m_eOwner);40944095	if(GetFirstArmyID() == -1)4096	{4097		pInitialUnit = FindInitialUnit();4098	}4099	else4100	{4101		CvArmyAI* pThisArmy = owningPlayer.getArmyAI(m_viArmyIDs[0]);4102		int iUnitID = pThisArmy->GetFirstUnitID();4103		if(iUnitID != -1)4104		{4105			pInitialUnit = owningPlayer.getUnit(iUnitID);4106		}4107		else4108		{4109			pInitialUnit = FindInitialUnit();4110		}4111	}41124113	if(pInitialUnit != NULL)4114	{4115		// Look at map for enemy units on the coast4116		for(iPlotLoop = 0; iPlotLoop < GC.getMap().numPlots(); iPlotLoop++)4117		{4118			pPlot = GC.getMap().plotByIndexUnchecked(iPlotLoop);41194120			if(pPlot->isRevealed(owningPlayer.getTeam()))4121			{4122				if(pPlot->isCoastalLand())4123				{4124					// Enemy defender here? (for now let's not add cities; they fire back!)4125					CvUnit* pUnit = pPlot->getVisibleEnemyDefender(m_eOwner);4126					if(pUnit)4127					{4128						// Find an adjacent coastal water tile4129						for(iDirectionLoop = 0; iDirectionLoop < NUM_DIRECTION_TYPES; ++iDirectionLoop)4130						{4131							pAdjacentPlot = plotDirection(pPlot->getX(), pPlot->getY(), ((DirectionTypes)iDirectionLoop));4132							if(pAdjacentPlot != NULL && pAdjacentPlot->isWater() && pAdjacentPlot->isShallowWater())4133							{4134								if(pInitialUnit->GeneratePath(pAdjacentPlot, 0, false, &iCurrentTurns))4135								{4136									if(iCurrentTurns < iBestTurns)4137									{4138										iBestTurns = iCurrentTurns;4139										pBestPlot = pAdjacentPlot;4140									}4141								}4142							}4143						}4144					}4145				}4146			}4147		}4148	}41494150	return pBestPlot;4151}

Calls

Called by