Bazaar developer reference

CvBuilderTaskingAI::UpdateRoutePlots()

Defined in
CvBuilderTaskingAI.cpp, line 527
Class
CvBuilderTaskingAI
Hook name
CivHooks::CvBuilderTaskingAI_UpdateRoutePlots

Hooks

static bool BeforeCvBuilderTaskingAI_UpdateRoutePlots(CvBuilderTaskingAI* self);static void AfterCvBuilderTaskingAI_UpdateRoutePlots(CvBuilderTaskingAI* self);static void ReplaceCvBuilderTaskingAI_UpdateRoutePlots(void (*original)(CvBuilderTaskingAI*), CvBuilderTaskingAI* self);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &BeforeCvBuilderTaskingAI_UpdateRoutePlots);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &AfterCvBuilderTaskingAI_UpdateRoutePlots);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_UpdateRoutePlots>(host, &ReplaceCvBuilderTaskingAI_UpdateRoutePlots);

Code

526/// Looks at city connections and marks plots that can be added as routes by EvaluateBuilder527void CvBuilderTaskingAI::UpdateRoutePlots(void)528{529	m_aiNonTerritoryPlots.clear();530531	// if there are fewer than 2 cities, we don't need to run this function532	if(m_pPlayer->GetCityConnections()->GetNumConnectableCities() < 2)533	{534		return;535	}536537	RouteTypes eBestRoute = m_pPlayer->getBestRoute();538	if(eBestRoute == NO_ROUTE)539	{540		return;541	}542543	// find a builder, if I don't have a builder, bail!544	CvUnit* pBuilder = NULL;545	CvUnit* pLoopUnit;546	int iLoopUnit;547	for(pLoopUnit = m_pPlayer->firstUnit(&iLoopUnit); pLoopUnit != NULL; pLoopUnit = m_pPlayer->nextUnit(&iLoopUnit))548	{549		if(pLoopUnit->AI_getUnitAIType() == UNITAI_WORKER)550		{551			pBuilder = pLoopUnit;552			break;553		}554	}555556	// If there's no builder, bail!557	if(!pBuilder)558	{559		return;560	}561562	// updating plots that are part of the road network563	CvCityConnections* pCityConnections = m_pPlayer->GetCityConnections();564565	for(int i = 0; i < GC.getNumBuildInfos(); i++)566	{567		BuildTypes eBuild = (BuildTypes)i;568		CvBuildInfo* pkBuild = GC.getBuildInfo(eBuild);569		if(!pkBuild)570		{571			continue;572		}573574		RouteTypes eRoute = (RouteTypes)pkBuild->getRoute();575		if(eRoute == NO_ROUTE)576		{577			continue;578		}579580		if(GC.getBuildInfo(eBuild)->getTechPrereq() != NO_TECH)581		{582			bool bHasTech = GET_TEAM(m_pPlayer->getTeam()).GetTeamTechs()->HasTech((TechTypes)GC.getBuildInfo(eBuild)->getTechPrereq());583			if(!bHasTech)584			{585				continue;586			}587		}588589		for(uint uiFirstCityIndex = 0; uiFirstCityIndex < pCityConnections->m_aiCityPlotIDs.size(); uiFirstCityIndex++)590		{591			for(uint uiSecondCityIndex = uiFirstCityIndex + 1; uiSecondCityIndex < pCityConnections->m_aiCityPlotIDs.size(); uiSecondCityIndex++)592			{593				// get the two cities594				CvCity* pFirstCity  = pCityConnections->GetCityFromIndex(uiFirstCityIndex);595				CvCity* pSecondCity = pCityConnections->GetCityFromIndex(uiSecondCityIndex);596				CvCity* pPlayerCapitalCity = NULL;597				CvCity* pTargetCity = NULL;598599				if(!pFirstCity || !pSecondCity)600				{601					continue;602				}603604				bool bConnectOnlyCapitals = (bool)GC.getCITY_CONNECTIONS_CONNECT_TO_CAPITAL();605				if (bConnectOnlyCapitals)606				{607					// only need to build roads to the capital608					if(!pFirstCity->isCapital() && !pSecondCity->isCapital())609					{610						continue;611					}612613					if(pFirstCity->isCapital() && pFirstCity->getOwner() == m_pPlayer->GetID())614					{615						pPlayerCapitalCity = pFirstCity;616						pTargetCity = pSecondCity;617					}618					else619					{620						pPlayerCapitalCity = pSecondCity;621						pTargetCity = pFirstCity;622					}623					ConnectCitiesToCapital(pPlayerCapitalCity, pTargetCity, eRoute);624				}625				else626				{627					ConnectCitiesForScenario(pFirstCity, pSecondCity, eBestRoute);628				}629			}630		}631	}632}

Calls

Called by