RouteValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 2387
- Hook name
CivHooks::RouteValid
Hooks
static bool BeforeRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceRouteValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::RouteValid>(host, &BeforeRouteValid);CivRegisterAfter<CivHooks::RouteValid>(host, &AfterRouteValid);CivRegisterReplace<CivHooks::RouteValid>(host, &ReplaceRouteValid);
Code
2385/// Route path finder - check validity of a coordinate2386/// This function does not require the global Tactical Analysis Map.2387int RouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2388{2389 CvPlot* pNewPlot;23902391 if(parent == NULL)2392 {2393 return TRUE;2394 }23952396 int iFlags = finder->GetInfo();2397 PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);2398 pNewPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);23992400 CvPlayer& kPlayer = GET_PLAYER(ePlayer);2401 if((iFlags & MOVE_ROUTE_ALLOW_UNEXPLORED) == 0 && !(pNewPlot->isRevealed(kPlayer.getTeam())))2402 {2403 return FALSE;2404 }24052406 if(kPlayer.GetPlayerTraits()->IsMoveFriendlyWoodsAsRoad())2407 {2408 if(pNewPlot->getOwner() == ePlayer)2409 {2410 if(pNewPlot->getFeatureType() == FEATURE_FOREST || pNewPlot->getFeatureType() == FEATURE_JUNGLE)2411 {2412 return TRUE;2413 }2414 }2415 }24162417 RouteTypes eRouteType = pNewPlot->getRouteType();2418 if(eRouteType == NO_ROUTE)2419 {2420 return FALSE;2421 }24222423 if(pNewPlot->IsRoutePillaged())2424 {2425 return FALSE;2426 }24272428 if(!pNewPlot->IsFriendlyTerritory(ePlayer))2429 {2430 PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2431 if(ePlotOwnerPlayer != NO_PLAYER)2432 {2433 PlayerTypes eMajorPlayer = NO_PLAYER;2434 PlayerTypes eMinorPlayer = NO_PLAYER;2435 CvPlayer& kPlotOwner = GET_PLAYER(ePlotOwnerPlayer);2436 if(kPlayer.isMinorCiv() && !kPlotOwner.isMinorCiv())2437 {2438 eMajorPlayer = ePlotOwnerPlayer;2439 eMinorPlayer = ePlayer;2440 }2441 else if(kPlotOwner.isMinorCiv() && !kPlayer.isMinorCiv())2442 {2443 eMajorPlayer = ePlayer;2444 eMinorPlayer = ePlotOwnerPlayer;2445 }2446 else2447 {2448 return FALSE;2449 }24502451 if(!GET_PLAYER(eMinorPlayer).GetMinorCivAI()->IsActiveQuestForPlayer(eMajorPlayer, MINOR_CIV_QUEST_ROUTE))2452 {2453 return FALSE;2454 }2455 }2456 }24572458 if(finder->GetInfo() & MOVE_ANY_ROUTE)2459 {2460#if defined(MOD_EVENTS_CITY_CONNECTIONS)2461 // Cities always have the best route, which permits "harbour to harbour" connections before The Wheel2462 if(pNewPlot->isCity())2463 {2464 return TRUE;2465 }2466#endif24672468 // if the player can't build2469 if(kPlayer.getBestRoute() == NO_ROUTE)2470 {2471 return FALSE;2472 }24732474 if(eRouteType != NO_ROUTE)2475 {2476 return TRUE;2477 }2478 }2479 else2480 {2481 int iRoute = iFlags & 0xFF00;2482 iRoute = iRoute >> 8;2483 iRoute = iRoute - 1;2484 RouteTypes eRequiredRoute = (RouteTypes)(iRoute);2485 if(eRouteType == eRequiredRoute)2486 {2487 return TRUE;2488 }2489 }24902491 return FALSE;2492}
Calls
- CvAStar::GetInfo()
- CvGlobals::getMap()
- CvMap::plotUnchecked(int, int) const
- CvMinorCivAI::IsActiveQuestForPlayer(PlayerTypes, MinorCivQuestTypes)
- CvPlayer::getBestRoute(CvPlot *) const
- CvPlayer::GetMinorCivAI() const
- CvPlayer::GetPlayerTraits() const
- CvPlayer::getTeam() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTraits::IsMoveFriendlyWoodsAsRoad() const
- CvPlot::getFeatureType() const
- CvPlot::getOwner() const
- CvPlot::getRouteType() const
- CvPlot::isCity() const
- CvPlot::IsFriendlyTerritory(PlayerTypes) const
- CvPlot::isRevealed(TeamTypes) const
- CvPlot::IsRoutePillaged() const