CvCitySpecializationAI::PlotValueForScience(CvPlot *)
- Defined in
- CvCitySpecializationAI.cpp, line 1264
- Class
- CvCitySpecializationAI
- Hook name
CivHooks::CvCitySpecializationAI_PlotValueForScience
Hooks
static bool BeforeCvCitySpecializationAI_PlotValueForScience(CvCitySpecializationAI* self, CvPlot* pPlot, int& result);static void AfterCvCitySpecializationAI_PlotValueForScience(CvCitySpecializationAI* self, CvPlot* pPlot, int& result);static int ReplaceCvCitySpecializationAI_PlotValueForScience(int (*original)(CvCitySpecializationAI*, CvPlot*), CvCitySpecializationAI* self, CvPlot* pPlot);CivRegisterBefore<CivHooks::CvCitySpecializationAI_PlotValueForScience>(host, &BeforeCvCitySpecializationAI_PlotValueForScience);CivRegisterAfter<CivHooks::CvCitySpecializationAI_PlotValueForScience>(host, &AfterCvCitySpecializationAI_PlotValueForScience);CivRegisterReplace<CivHooks::CvCitySpecializationAI_PlotValueForScience>(host, &ReplaceCvCitySpecializationAI_PlotValueForScience);
Code
1263/// Evaluate strength of a city plot for providing science1264int CvCitySpecializationAI::PlotValueForScience(CvPlot* pPlot)1265{1266 // Roughly half of weight comes from food yield1267 // The other half will be are there open tiles we can easily build schools on1268 int iTotalFoodYield = 0;1269 int iTotalClearTileWeight = 0;1270 int iMultiplier = 0;1271 int iPotentialYield = 0;1272 int iFirstRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_FIRST_RING();1273 int iSecondRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_SECOND_RING();1274 int iThirdRingMultiplier = GC.getAI_CITY_SPECIALIZATION_YIELD_WEIGHT_THIRD_RING();12751276 // Evaluate potential from plots not currently being worked1277 for(int iI = 0; iI < GC.getAI_CITY_SPECIALIZATION_YIELD_NUM_TILES_CONSIDERED(); iI++)1278 {1279 bool bIsClear = false;12801281 if(iI != CITY_HOME_PLOT)1282 {1283 CvPlot* pLoopPlot = plotCity(pPlot->getX(), pPlot->getY(), iI);1284 if(pLoopPlot != NULL)1285 {1286 if(pLoopPlot->getResourceType() == NO_RESOURCE)1287 {1288 if(pLoopPlot->getFeatureType() == NO_FEATURE)1289 {1290 if(!pLoopPlot->isHills())1291 {1292 if(pLoopPlot->getImprovementType() == NO_IMPROVEMENT)1293 {1294 bIsClear = true;1295 }1296 }1297 }1298 }12991300 iPotentialYield = pLoopPlot->getYield(YIELD_FOOD) + pLoopPlot->getYield(YIELD_SCIENCE);13011302 // If owned by someone else, not worth anything1303 if(pLoopPlot->isOwned() && pLoopPlot->getOwner() != m_pPlayer->GetID())1304 {1305 iMultiplier = 0;1306 }1307 else1308 {1309 int iDistance = plotDistance(pLoopPlot->getX(), pLoopPlot->getY(), pPlot->getX(), pPlot->getY());1310 if(iDistance == 1)1311 {1312 iMultiplier = iFirstRingMultiplier;1313 }1314 else if(iDistance == 2)1315 {1316 iMultiplier = iSecondRingMultiplier;1317 }1318 else if(iDistance == 3)1319 {1320 iMultiplier = iThirdRingMultiplier;1321 }1322 }13231324 iTotalFoodYield += iPotentialYield * iMultiplier;1325 if(bIsClear)1326 {1327 iTotalClearTileWeight += iMultiplier;1328 }1329 }1330 }1331 }13321333 return iTotalFoodYield + iTotalClearTileWeight;1334}
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::getFeatureType() const
- CvPlot::getImprovementType() const
- CvPlot::getOwner() const
- CvPlot::getResourceType(TeamTypes) const
- CvPlot::getX() const
- CvPlot::getY() const
- CvPlot::getYield(YieldTypes) const
- CvPlot::isHills() const
- CvPlot::isOwned() const
- plotCity(int, int, int)
- plotDistance(int, int, int, int)