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
- CustomMods::isBUGFIX_FREE_FOOD_BUILDING()
- CvBuildingEntry::GetBuildingClassInfo() const
- CvBuildingEntry::GetFoodKept() const
- CvBuildingEntry::GetProductionCost() const
- CvCity::canConstruct(BuildingTypes, bool, bool, bool, bool, CvString *) const
- CvCity::getFirstBuildingOrder(BuildingTypes) const
- CvGlobals::getBuildingInfo(BuildingTypes)
- CvGlobals::getNumBuildingInfos()
CvWeightedVector::CvWeightedVectorCvWeightedVector::GetElementCvWeightedVector::push_backCvWeightedVector::sizeCvWeightedVector::SortItems- isNationalWonderClass(const CvBuildingClassInfo &)
- isWorldWonderClass(const CvBuildingClassInfo &)