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
- CvBuildingEntry::GetBuildingClassInfo() const
- CvBuildingEntry::GetProductionCost() const
- CvBuildingEntry::GetYieldChange(int) 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 &)