Bazaar developer reference

RouteGetExtraChild(CvAStarNode *, int, int &, int &, CvAStar *)

Defined in
CvAStar.cpp, line 2316
Hook name
CivHooks::RouteGetExtraChild

Hooks

static bool BeforeRouteGetExtraChild(CvAStarNode* node, int iIndex, int& iX, int& iY, CvAStar* finder, int& result);static void AfterRouteGetExtraChild(CvAStarNode* node, int iIndex, int& iX, int& iY, CvAStar* finder, int& result);static int ReplaceRouteGetExtraChild(int (*original)(CvAStarNode*, int, int&, int&, CvAStar*), CvAStarNode* node, int iIndex, int& iX, int& iY, CvAStar* finder);CivRegisterBefore<CivHooks::RouteGetExtraChild>(host, &BeforeRouteGetExtraChild);CivRegisterAfter<CivHooks::RouteGetExtraChild>(host, &AfterRouteGetExtraChild);CivRegisterReplace<CivHooks::RouteGetExtraChild>(host, &ReplaceRouteGetExtraChild);

Code

2315// Route - Return the x, y plot of the node that we want to access2316int RouteGetExtraChild(CvAStarNode* node, int iIndex, int& iX, int& iY, CvAStar* finder)2317{2318	iX = -1;2319	iY = -1;23202321	PlayerTypes ePlayer = ((PlayerTypes)(finder->GetInfo() & 0xFF));2322	CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);2323	TeamTypes eTeam = kPlayer.getTeam();2324	CvPlot* pPlot = GC.getMap().plotCheckInvalid(node->m_iX, node->m_iY);23252326	if(!pPlot)2327	{2328		return 0;2329	}23302331	CvCity* pCity = pPlot->getPlotCity();23322333	// if there isn't a city there or the city isn't on our team2334	if(!pCity || pCity->getTeam() != eTeam)2335	{2336		return 0;2337	}23382339	int iValidCount = 0;2340	CvCityConnections* pCityConnections = kPlayer.GetCityConnections();23412342	uint uiFirstCityIndex = pCityConnections->GetIndexFromCity(pCity);2343	for(uint uiSecondCityIndex = 0; uiSecondCityIndex < pCityConnections->m_aiCityPlotIDs.size(); uiSecondCityIndex++)2344	{2345		if(uiFirstCityIndex == uiSecondCityIndex)2346		{2347			continue;2348		}23492350		CvCityConnections::RouteInfo* pRouteInfo = pCityConnections->GetRouteInfo(uiFirstCityIndex, uiSecondCityIndex);2351		if(!pRouteInfo)2352		{2353			continue;2354		}23552356		// get the two cities2357		CvCity* pFirstCity  = pCityConnections->GetCityFromIndex(uiFirstCityIndex);2358		CvCity* pSecondCity = pCityConnections->GetCityFromIndex(uiSecondCityIndex);23592360		if(!pFirstCity || !pSecondCity)2361		{2362			continue;2363		}23642365#if defined(MOD_EVENTS_CITY_CONNECTIONS)2366		if(pRouteInfo->m_cRouteState & CvCityConnections::HAS_INDIRECT_ROUTE)2367#else2368		if(pRouteInfo->m_cRouteState & CvCityConnections::HAS_WATER_ROUTE)2369#endif2370		{2371			if(iValidCount == iIndex)2372			{2373				iX = pSecondCity->getX();2374				iY = pSecondCity->getY();2375				return 1;2376			}2377			iValidCount++;2378		}2379	}23802381	return 0;2382}

Calls

Called by