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
- CvAINavalOperation::FindInitialUnit()
- CvAIOperation::GetFirstArmyID()
- CvArmyAI::GetFirstUnitID()
- CvGlobals::getMap()
- CvMap::numPlots() const
- CvMap::plotByIndexUnchecked(int) const
- CvPlayer::getArmyAI(int)
- CvPlayer::getTeam() const
- CvPlayer::getUnit(int)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getVisibleEnemyDefender(PlayerTypes)
- CvPlot::getX() const
- CvPlot::getY() const
- CvPlot::isCoastalLand(int) const
- CvPlot::isRevealed(TeamTypes) const
- CvPlot::isShallowWater() const
- CvPlot::isWater() const
- CvUnit::GeneratePath(const CvPlot *, int, bool, int *) const
- plotDirection(int, int, DirectionTypes)
std::vector::operator[]