Bazaar developer reference

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

Called by