CvCitySpecializationAI::PlotValueForSpecificYield(CvPlot *, YieldTypes)
- Defined in
- CvCitySpecializationAI.cpp, line 1215
- Class
- CvCitySpecializationAI
- Hook name
CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield
Hooks
static bool BeforeCvCitySpecializationAI_PlotValueForSpecificYield(CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield, int& result);static void AfterCvCitySpecializationAI_PlotValueForSpecificYield(CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield, int& result);static int ReplaceCvCitySpecializationAI_PlotValueForSpecificYield(int (*original)(CvCitySpecializationAI*, CvPlot*, YieldTypes), CvCitySpecializationAI* self, CvPlot* pPlot, YieldTypes eYield);CivRegisterBefore<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &BeforeCvCitySpecializationAI_PlotValueForSpecificYield);CivRegisterAfter<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &AfterCvCitySpecializationAI_PlotValueForSpecificYield);CivRegisterReplace<CivHooks::CvCitySpecializationAI_PlotValueForSpecificYield>(host, &ReplaceCvCitySpecializationAI_PlotValueForSpecificYield);
Code
1214/// Evaluate strength of an existing city for providing a specific type of yield (except Science!)1215int CvCitySpecializationAI::PlotValueForSpecificYield(CvPlot* pPlot, YieldTypes eYield)1216{1217 int iTotalPotentialYield = 0;1218 int iMultiplier = 0;1219 int iPotentialYield = 0;1220 int iFirstRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_FIRST_RING();1221 int iSecondRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_SECOND_RING();1222 int iThirdRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_THIRD_RING();12231224 // Evaluate potential from plots not currently being worked1225 for(int iI = 0; iI < GC.getAI_CITY_SPECIALIZATION_YIELD_NUM_TILES_CONSIDERED(); iI++)1226 {1227 if(iI != CITY_HOME_PLOT)1228 {1229 CvPlot* pLoopPlot = plotCity(pPlot->getX(), pPlot->getY(), iI);1230 if(pLoopPlot != NULL)1231 {1232 iPotentialYield = pLoopPlot->getYield(eYield);12331234 // If owned by someone else, not worth anything1235 if(pLoopPlot->isOwned() && pLoopPlot->getOwner() != m_pPlayer->GetID())1236 {1237 iMultiplier = 0;1238 }1239 else1240 {1241 int iDistance = plotDistance(pLoopPlot->getX(), pLoopPlot->getY(), pPlot->getX(), pPlot->getY());1242 if(iDistance == 1)1243 {1244 iMultiplier = iFirstRingMultiplier;1245 }1246 else if(iDistance == 2)1247 {1248 iMultiplier = iSecondRingMultiplier;1249 }1250 else if(iDistance == 3)1251 {1252 iMultiplier = iThirdRingMultiplier;1253 }1254 }1255 iTotalPotentialYield += iPotentialYield * iMultiplier;1256 }1257 }1258 }12591260 return iTotalPotentialYield;1261}
Calls
- CvGlobals::getAI_CITY_SPECIALIZATION_YIELD_NUM_TILES_CONSIDERED()
- CvGlobals::getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_FIRST_RING()
- CvGlobals::getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_SECOND_RING()
- CvGlobals::getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_THIRD_RING()
- CvPlayer::GetID() const
- CvPlot::getOwner() const
- CvPlot::getX() const
- CvPlot::getY() const
- CvPlot::getYield(YieldTypes) const
- CvPlot::isOwned() const
- plotCity(int, int, int)
- plotDistance(int, int, int, int)