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
BaseVector::size- CvAStar::GetInfo()
- CvCity::getTeam() const
- CvCity::getX() const
- CvCity::getY() const
- CvCityConnections::GetCityFromIndex(int)
- CvCityConnections::GetIndexFromCity(CvCity *)
- CvCityConnections::GetRouteInfo(uint, uint)
- CvGlobals::getMap()
- CvMap::plotCheckInvalid(int, int) const
- CvPlayer::GetCityConnections() const
- CvPlayer::getTeam() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getPlotCity() const