Bazaar developer reference

CvBuilderTaskingAI::AddRouteDirectives(CvUnit *, CvPlot *, int)

Defined in
CvBuilderTaskingAI.cpp, line 1312
Class
CvBuilderTaskingAI
Hook name
CivHooks::CvBuilderTaskingAI_AddRouteDirectives

Hooks

static bool BeforeCvBuilderTaskingAI_AddRouteDirectives(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);static void AfterCvBuilderTaskingAI_AddRouteDirectives(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);static void ReplaceCvBuilderTaskingAI_AddRouteDirectives(void (*original)(CvBuilderTaskingAI*, CvUnit*, CvPlot*, int), CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_AddRouteDirectives>(host, &BeforeCvBuilderTaskingAI_AddRouteDirectives);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_AddRouteDirectives>(host, &AfterCvBuilderTaskingAI_AddRouteDirectives);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_AddRouteDirectives>(host, &ReplaceCvBuilderTaskingAI_AddRouteDirectives);

Code

1311/// Adds a directive if the unit can construct a road in the plot1312void CvBuilderTaskingAI::AddRouteDirectives(CvUnit* pUnit, CvPlot* pPlot, int iMoveTurnsAway)1313{1314	RouteTypes eBestRouteType = m_pPlayer->getBestRoute();13151316	// if the player can't build a route, bail out!1317	if(eBestRouteType == NO_ROUTE)1318	{1319		return;1320	}13211322	if(pPlot->getRouteType() == eBestRouteType && !pPlot->IsRoutePillaged())1323	{1324		return;1325	}13261327	// the plot was not flagged this turn, so ignore1328	bool bShouldRoadThisTile = (pPlot->GetBuilderAIScratchPadTurn() == GC.getGame().getGameTurn()) && (pPlot->GetBuilderAIScratchPadPlayer() == pUnit->getOwner());1329	if(!bShouldRoadThisTile)1330	{1331		return;1332	}13331334	// find the route build1335	BuildTypes eRouteBuild = NO_BUILD;1336	if(pPlot->IsRoutePillaged())1337	{1338		eRouteBuild = m_eRepairBuild;1339	}1340	else1341	{1342		RouteTypes eRoute = pPlot->GetBuilderAIScratchPadRoute();1343		for(int i = 0; i < GC.getNumBuildInfos(); i++)1344		{1345			BuildTypes eBuild = (BuildTypes)i;1346			CvBuildInfo* pkBuild = GC.getBuildInfo(eBuild);1347			if(pkBuild && pkBuild->getRoute() == eRoute)1348			{1349				eRouteBuild = eBuild;1350				break;1351			}1352		}1353	}13541355	if(eRouteBuild == NO_BUILD)1356	{1357		return;1358	}13591360	CvUnitEntry& kUnitInfo = pUnit->getUnitInfo();1361	if(!kUnitInfo.GetBuilds(eRouteBuild))1362	{1363		return;1364	}13651366	if(GET_PLAYER(pUnit->getOwner()).isOption(PLAYEROPTION_LEAVE_FORESTS))1367	{1368		FeatureTypes eFeature = pPlot->getFeatureType();1369		if(eFeature != NO_FEATURE)1370		{1371			CvBuildInfo* pkBuild = GC.getBuildInfo(eRouteBuild);1372			if(pkBuild && pkBuild->isFeatureRemove(eFeature))1373			{1374				return;1375			}1376		}1377	}13781379	int iWeight = GC.getBUILDER_TASKING_BASELINE_BUILD_ROUTES();1380	BuilderDirective::BuilderDirectiveType eDirectiveType = BuilderDirective::BUILD_ROUTE;1381	if(eRouteBuild == m_eRepairBuild)1382	{1383		iWeight = GC.getBUILDER_TASKING_BASELINE_REPAIR();1384		eDirectiveType = BuilderDirective::REPAIR;1385	}13861387	// int iTurnsAway = FindTurnsAway(pUnit, pPlot);1388	iWeight = iWeight / (iMoveTurnsAway/*iTurnsAway*/ + 1);1389	iWeight = GetBuildCostWeight(iWeight, pPlot, eRouteBuild);1390	iWeight += GetBuildTimeWeight(pUnit, pPlot, eRouteBuild, false, iMoveTurnsAway);1391	iWeight *= pPlot->GetBuilderAIScratchPadValue();1392	iWeight = CorrectWeight(iWeight);13931394	BuilderDirective directive;1395	directive.m_eDirective = eDirectiveType;1396	directive.m_eBuild = eRouteBuild;1397	directive.m_eResource = NO_RESOURCE;1398	directive.m_sX = pPlot->getX();1399	directive.m_sY = pPlot->getY();1400	directive.m_sMoveTurnsAway = iMoveTurnsAway;14011402	if(m_bLogging)1403	{1404		CvString strTemp;1405		strTemp.Format("AddRouteDirectives, adding, x: %d y: %d, Weight, %d", pPlot->getX(), pPlot->getY(), iWeight);1406		LogInfo(strTemp, m_pPlayer);1407	}14081409	m_aDirectives.push_back(directive, iWeight);1410}

Calls

Called by