Bazaar developer reference

CvProjectProductionAI::RecommendProject()

Defined in
CvProjectProductionAI.cpp, line 98
Class
CvProjectProductionAI
Hook name
CivHooks::CvProjectProductionAI_RecommendProject

Hooks

static bool BeforeCvProjectProductionAI_RecommendProject(CvProjectProductionAI* self, ProjectTypes& result);static void AfterCvProjectProductionAI_RecommendProject(CvProjectProductionAI* self, ProjectTypes& result);static ProjectTypes ReplaceCvProjectProductionAI_RecommendProject(ProjectTypes (*original)(CvProjectProductionAI*), CvProjectProductionAI* self);CivRegisterBefore<CivHooks::CvProjectProductionAI_RecommendProject>(host, &BeforeCvProjectProductionAI_RecommendProject);CivRegisterAfter<CivHooks::CvProjectProductionAI_RecommendProject>(host, &AfterCvProjectProductionAI_RecommendProject);CivRegisterReplace<CivHooks::CvProjectProductionAI_RecommendProject>(host, &ReplaceCvProjectProductionAI_RecommendProject);

Code

97/// Recommend highest-weighted Project98ProjectTypes CvProjectProductionAI::RecommendProject()99{100	CvAssert(m_pCity);101	if(!m_pCity)102		return NO_PROJECT;103104	int iProjectLoop;105	int iWeight;106	int iTurnsLeft;107108	// Reset list of all the possible projects109	m_Buildables.clear();110111	// Loop through adding the available projects112	for(iProjectLoop = 0; iProjectLoop < GC.GetGameProjects()->GetNumProjects(); iProjectLoop++)113	{114		// Make sure this project can be built now115		if(m_pCity->canCreate((ProjectTypes)iProjectLoop))116		{117			// Update weight based on turns to construct118			iTurnsLeft = m_pCity->getProductionTurnsLeft((ProjectTypes) iProjectLoop, 0);119			iWeight = CityStrategyAIHelpers::ReweightByTurnsLeft(m_ProjectAIWeights.GetWeight((ProjectTypes)iProjectLoop), iTurnsLeft);120			m_Buildables.push_back(iProjectLoop, iWeight);121		}122	}123124	// Sort items and grab the first one125	if(m_Buildables.size() > 0)126	{127		m_Buildables.SortItems();128		LogPossibleBuilds();129		return (ProjectTypes)m_Buildables.GetElement(0);130	}131132	// Unless we didn't find any133	else134	{135		return NO_PROJECT;136	}137}

Calls