CvUnit::EnemyScoreAtRange(const CvPlot *, bool) const
- Defined in
- CvUnit.cpp, line 13403
- Class
- CvUnit
- Hook name
CivHooks::CvUnit_EnemyScoreAtRange
Hooks
static bool BeforeCvUnit_EnemyScoreAtRange(const CvUnit* self, const CvPlot* pPlot, bool onlyInterceptors, int& result);static void AfterCvUnit_EnemyScoreAtRange(const CvUnit* self, const CvPlot* pPlot, bool onlyInterceptors, int& result);static int ReplaceCvUnit_EnemyScoreAtRange(int (*original)(const CvUnit*, const CvPlot*, bool), const CvUnit* self, const CvPlot* pPlot, bool onlyInterceptors);CivRegisterBefore<CivHooks::CvUnit_EnemyScoreAtRange>(host, &BeforeCvUnit_EnemyScoreAtRange);CivRegisterAfter<CivHooks::CvUnit_EnemyScoreAtRange>(host, &AfterCvUnit_EnemyScoreAtRange);CivRegisterReplace<CivHooks::CvUnit_EnemyScoreAtRange>(host, &ReplaceCvUnit_EnemyScoreAtRange);
Code
13402#if defined(MOD_AI_SMART_V3)13403int CvUnit::EnemyScoreAtRange(const CvPlot* pPlot, bool onlyInterceptors) const13404{13405 VALIDATE_OBJECT13406 if(pPlot == NULL)13407 {13408 pPlot = plot();13409 }1341013411 int interceptorCount = 0;13412 CvPlayer& playerOwner = GET_PLAYER(m_eOwner);1341313414 // Loop through all the players13415 for(int iI = 0; iI < MAX_PLAYERS; iI++)13416 {13417 CvPlayer& kPlayer = GET_PLAYER((PlayerTypes)iI);13418 if(kPlayer.isAlive() && kPlayer.GetID() != playerOwner.GetID())13419 {13420 if (atWar(kPlayer.getTeam(), playerOwner.getTeam()))13421 {13422 CvUnit* pLoopUnit;13423 int iLoopUnit = 0;13424 for (pLoopUnit = kPlayer.firstUnit(&iLoopUnit); pLoopUnit != NULL; pLoopUnit = kPlayer.nextUnit(&iLoopUnit))13425 {13426 // Must be able to intercept or have combat value.13427 if (!pLoopUnit->isDelayedDeath() && (pLoopUnit->canAirDefend() || (!onlyInterceptors && (pLoopUnit->GetBaseCombatStrength() > 0))))13428 {13429 int plDistance = plotDistance(pLoopUnit->getX(), pLoopUnit->getY(), pPlot->getX(), pPlot->getY());13430 int rangeScore = GetRange() + (pLoopUnit->canAirDefend() ? (pLoopUnit->getUnitInfo().GetAirInterceptRange() / 2) : 0);13431 // Check a minimum range to be a target to intercept13432 if (plDistance <= rangeScore)13433 {13434 interceptorCount++;13435 }13436 // This is considered close range, counts double.13437 if (plDistance <= (rangeScore / 2))13438 {13439 interceptorCount++;13440 }13441 }13442 }13443 }13444 }13445 }13446 return interceptorCount;13447}
Calls
- atWar(TeamTypes, TeamTypes)
- CvPlayer::firstUnit(int *, bool)
- CvPlayer::GetID() const
- CvPlayer::getTeam() const
- CvPlayer::isAlive() const
- CvPlayer::nextUnit(int *, bool)
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getX() const
- CvPlot::getY() const
- CvUnit::canAirDefend(const CvPlot *) const
- CvUnit::GetBaseCombatStrength(bool) const
- CvUnit::GetRange() const
- CvUnit::getUnitInfo() const
- CvUnit::getX() const
- CvUnit::getY() const
- CvUnit::isDelayedDeath() const
- CvUnit::plot() const
- CvUnitEntry::GetAirInterceptRange() const
FAutoVariable::operator const PlayerTypes &- plotDistance(int, int, int, int)