EconomicAIHelpers::IsTestStrategy_CitiesNeedNavalTileImprovement(EconomicAIStrategyTypes, CvPlayer *)
- Defined in
- CvEconomicAI.cpp, line 3550
- Hook name
CivHooks::EconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement
Hooks
static bool BeforeEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement(EconomicAIStrategyTypes eStrategy, CvPlayer* pPlayer, bool& result);static void AfterEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement(EconomicAIStrategyTypes eStrategy, CvPlayer* pPlayer, bool& result);static bool ReplaceEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement(bool (*original)(EconomicAIStrategyTypes, CvPlayer*), EconomicAIStrategyTypes eStrategy, CvPlayer* pPlayer);CivRegisterBefore<CivHooks::EconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement>(host, &BeforeEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement);CivRegisterAfter<CivHooks::EconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement>(host, &AfterEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement);CivRegisterReplace<CivHooks::EconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement>(host, &ReplaceEconomicAIHelpers_IsTestStrategy_CitiesNeedNavalTileImprovement);
Code
3549/// "Cities Need Naval Tile Improvement" Player Strategy: Looks at how many of this player's Cities need NAVAL_TILE_IMPROVEMENT, and depending on the intrinsic NAVAL_TILE_IMPROVEMENT Flavor decides whether or not it's worth prioritizing this Flavor on an empire-wide scale3550bool EconomicAIHelpers::IsTestStrategy_CitiesNeedNavalTileImprovement(EconomicAIStrategyTypes eStrategy, CvPlayer* pPlayer)3551{3552 int iNumCitiesNeedNavalTileImprovement = 0;35533554 CvCity* pLoopCity;3555 int iLoop;35563557 AICityStrategyTypes eStrategyNeedNavalTileImprovement = (AICityStrategyTypes) GC.getInfoTypeForString("AICITYSTRATEGY_NEED_NAVAL_TILE_IMPROVEMENT");35583559 // CityStrategy doesn't exist in XML, so abort3560 if(eStrategyNeedNavalTileImprovement == NO_AICITYSTRATEGY)3561 {3562 return false;3563 }35643565 for(pLoopCity = pPlayer->firstCity(&iLoop); pLoopCity != NULL; pLoopCity = pPlayer->nextCity(&iLoop))3566 {3567 if(pLoopCity->GetCityStrategyAI()->IsUsingCityStrategy(eStrategyNeedNavalTileImprovement))3568 {3569 iNumCitiesNeedNavalTileImprovement++;3570 }3571 }35723573 if(iNumCitiesNeedNavalTileImprovement > 0)3574 {3575 CvEconomicAIStrategyXMLEntry* pStrategy = pPlayer->GetEconomicAI()->GetEconomicAIStrategies()->GetEntry(eStrategy);3576 int iWeightThresholdModifier = GetWeightThresholdModifier(eStrategy, pPlayer); // 1 Weight per NAVAL_TILE_IMPROVEMENT Flavor3577 int iWeightThreshold = pStrategy->GetWeightThreshold() + iWeightThresholdModifier; // 2535783579 int iCurrentWeight = (pPlayer->getNumCities() - 1) * 10;3580 iCurrentWeight /= iWeightThreshold;35813582 // See CvStrategyAI::IsTestStrategy_CitiesNeedBorders for a couple examples on how the math here works35833584 // Do enough of our Cities want NavalTileImprovement? [Average is 10/30; range is 10/25 to 10/35]3585 if(iNumCitiesNeedNavalTileImprovement > iCurrentWeight)3586 {3587 return true;3588 }3589 }35903591 return false;3592}
Calls
- CvCity::GetCityStrategyAI() const
- CvCityStrategyAI::IsUsingCityStrategy(AICityStrategyTypes)
- CvEconomicAI::GetEconomicAIStrategies()
- CvEconomicAIStrategyXMLEntries::GetEntry(int)
- CvEconomicAIStrategyXMLEntry::GetWeightThreshold() const
- CvGlobals::getInfoTypeForString(const char *, bool) const
- CvPlayer::firstCity(int *, bool)
- CvPlayer::GetEconomicAI() const
- CvPlayer::getNumCities() const
- CvPlayer::nextCity(int *, bool)
- EconomicAIHelpers::GetWeightThresholdModifier(EconomicAIStrategyTypes, CvPlayer *)