Bazaar developer reference

CvCity::ChooseFreeCultureBuilding() const

Defined in
CvCity.cpp, line 9907
Class
CvCity
Hook name
CivHooks::CvCity_ChooseFreeCultureBuilding

Hooks

static bool BeforeCvCity_ChooseFreeCultureBuilding(const CvCity* self, BuildingTypes& result);static void AfterCvCity_ChooseFreeCultureBuilding(const CvCity* self, BuildingTypes& result);static BuildingTypes ReplaceCvCity_ChooseFreeCultureBuilding(BuildingTypes (*original)(const CvCity*), const CvCity* self);CivRegisterBefore<CivHooks::CvCity_ChooseFreeCultureBuilding>(host, &BeforeCvCity_ChooseFreeCultureBuilding);CivRegisterAfter<CivHooks::CvCity_ChooseFreeCultureBuilding>(host, &AfterCvCity_ChooseFreeCultureBuilding);CivRegisterReplace<CivHooks::CvCity_ChooseFreeCultureBuilding>(host, &ReplaceCvCity_ChooseFreeCultureBuilding);

Code

9906/// Find the non-wonder building that provides the highest culture at the least cost9907BuildingTypes CvCity::ChooseFreeCultureBuilding() const9908{9909	BuildingTypes eRtnValue = NO_BUILDING;9910	int iNumBuildingInfos = GC.getNumBuildingInfos();9911	CvWeightedVector<int, SAFE_ESTIMATE_NUM_BUILDINGS, true> buildingChoices;99129913	for(int iI = 0; iI < iNumBuildingInfos; iI++)9914	{9915		const BuildingTypes eBuilding = static_cast<BuildingTypes>(iI);9916		CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);9917		if(pkBuildingInfo)9918		{9919			const CvBuildingClassInfo& kBuildingClassInfo = pkBuildingInfo->GetBuildingClassInfo();9920			if(!isWorldWonderClass(kBuildingClassInfo) && !isNationalWonderClass(kBuildingClassInfo))9921			{9922				int iCulture = pkBuildingInfo->GetYieldChange(YIELD_CULTURE);9923				int iCost = pkBuildingInfo->GetProductionCost();9924				if(getFirstBuildingOrder(eBuilding) != -1 || canConstruct(eBuilding))9925				{9926					if(iCulture > 0 && iCost > 0)9927					{9928						int iWeight = iCulture * 10000 / iCost;99299930						if(iWeight > 0)9931						{9932							buildingChoices.push_back(iI, iWeight);9933						}9934					}9935				}9936			}9937		}9938	}99399940	if(buildingChoices.size() > 0)9941	{9942		buildingChoices.SortItems();9943		eRtnValue = (BuildingTypes)buildingChoices.GetElement(0);9944	}99459946	return eRtnValue;9947}

Calls

Called by