Bazaar developer reference

CvCity::ChooseFreeFoodBuilding() const

Defined in
CvCity.cpp, line 9951
Class
CvCity
Hook name
CivHooks::CvCity_ChooseFreeFoodBuilding

Hooks

static bool BeforeCvCity_ChooseFreeFoodBuilding(const CvCity* self, BuildingTypes& result);static void AfterCvCity_ChooseFreeFoodBuilding(const CvCity* self, BuildingTypes& result);static BuildingTypes ReplaceCvCity_ChooseFreeFoodBuilding(BuildingTypes (*original)(const CvCity*), const CvCity* self);CivRegisterBefore<CivHooks::CvCity_ChooseFreeFoodBuilding>(host, &BeforeCvCity_ChooseFreeFoodBuilding);CivRegisterAfter<CivHooks::CvCity_ChooseFreeFoodBuilding>(host, &AfterCvCity_ChooseFreeFoodBuilding);CivRegisterReplace<CivHooks::CvCity_ChooseFreeFoodBuilding>(host, &ReplaceCvCity_ChooseFreeFoodBuilding);

Code

9950/// Find the non-wonder building that provides the highest culture at the least cost9951BuildingTypes CvCity::ChooseFreeFoodBuilding() const9952{9953	BuildingTypes eRtnValue = NO_BUILDING;9954	int iNumBuildingInfos = GC.getNumBuildingInfos();9955	CvWeightedVector<int, SAFE_ESTIMATE_NUM_BUILDINGS, true> buildingChoices;99569957	for(int iI = 0; iI < iNumBuildingInfos; iI++)9958	{9959		const BuildingTypes eBuilding = static_cast<BuildingTypes>(iI);9960		CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);9961		if(pkBuildingInfo)9962		{9963			const CvBuildingClassInfo& kBuildingClassInfo = pkBuildingInfo->GetBuildingClassInfo();9964			if(!isWorldWonderClass(kBuildingClassInfo) && !isNationalWonderClass(kBuildingClassInfo))9965			{9966#if defined(MOD_BUGFIX_FREE_FOOD_BUILDING)9967				if(!MOD_BUGFIX_FREE_FOOD_BUILDING || (getFirstBuildingOrder(eBuilding) != -1 || canConstruct(eBuilding)))9968				{9969#endif9970					int iFood = pkBuildingInfo->GetFoodKept();9971					int iCost = pkBuildingInfo->GetProductionCost();9972					if(iFood > 0 && iCost > 0)9973					{9974						int iWeight = iFood * 10000 / iCost;99759976						if(iWeight > 0)9977						{9978							buildingChoices.push_back(iI, iWeight);9979						}9980					}9981#if defined(MOD_BUGFIX_FREE_FOOD_BUILDING)9982				}9983#endif9984			}9985		}9986	}99879988	if(buildingChoices.size() > 0)9989	{9990		buildingChoices.SortItems();9991		eRtnValue = (BuildingTypes)buildingChoices.GetElement(0);9992	}99939994	return eRtnValue;9995}

Calls

Called by