CvBuildingProductionAI::RecommendBuilding()
- Defined in
- CvBuildingProductionAI.cpp, line 155
- Class
- CvBuildingProductionAI
- Hook name
CivHooks::CvBuildingProductionAI_RecommendBuilding
Hooks
static bool BeforeCvBuildingProductionAI_RecommendBuilding(CvBuildingProductionAI* self, BuildingTypes& result);static void AfterCvBuildingProductionAI_RecommendBuilding(CvBuildingProductionAI* self, BuildingTypes& result);static BuildingTypes ReplaceCvBuildingProductionAI_RecommendBuilding(BuildingTypes (*original)(CvBuildingProductionAI*), CvBuildingProductionAI* self);CivRegisterBefore<CivHooks::CvBuildingProductionAI_RecommendBuilding>(host, &BeforeCvBuildingProductionAI_RecommendBuilding);CivRegisterAfter<CivHooks::CvBuildingProductionAI_RecommendBuilding>(host, &AfterCvBuildingProductionAI_RecommendBuilding);CivRegisterReplace<CivHooks::CvBuildingProductionAI_RecommendBuilding>(host, &ReplaceCvBuildingProductionAI_RecommendBuilding);
Code
154/// Recommend highest-weighted building155BuildingTypes CvBuildingProductionAI::RecommendBuilding()156{157 int iBldgLoop;158 int iWeight;159 int iTurnsLeft;160161 // Reset list of all the possible buildings162 m_Buildables.clear();163164 // Loop through adding the available buildings165 for(iBldgLoop = 0; iBldgLoop < GC.GetGameBuildings()->GetNumBuildings(); iBldgLoop++)166 {167 // Make sure this building can be built now168 if(m_pCity->canConstruct((BuildingTypes)iBldgLoop))169 {170 // Update weight based on turns to construct171 iTurnsLeft = m_pCity->getProductionTurnsLeft((BuildingTypes) iBldgLoop, 0);172 iWeight = CityStrategyAIHelpers::ReweightByTurnsLeft(m_BuildingAIWeights.GetWeight((BuildingTypes)iBldgLoop), iTurnsLeft);173 m_Buildables.push_back(iBldgLoop, iWeight);174 }175 }176177 // Sort items and grab the first one178 if(m_Buildables.size() > 0)179 {180 m_Buildables.SortItems();181 LogPossibleBuilds();182 return (BuildingTypes)m_Buildables.GetElement(0);183 }184185 // Unless we didn't find any186 else187 {188 return NO_BUILDING;189 }190}
Calls
- CityStrategyAIHelpers::ReweightByTurnsLeft(int, int)
- CvBuildingProductionAI::LogPossibleBuilds()
- CvBuildingXMLEntries::GetNumBuildings()
- CvCity::canConstruct(BuildingTypes, bool, bool, bool, bool, CvString *) const
- CvCity::getProductionTurnsLeft(BuildingTypes, int) const
- CvGlobals::GetGameBuildings() const
CvWeightedVector::clearCvWeightedVector::GetElementCvWeightedVector::GetWeightCvWeightedVector::push_backCvWeightedVector::sizeCvWeightedVector::SortItems