BuildRouteValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 2658
- Hook name
CivHooks::BuildRouteValid
Hooks
static bool BeforeBuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterBuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceBuildRouteValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::BuildRouteValid>(host, &BeforeBuildRouteValid);CivRegisterAfter<CivHooks::BuildRouteValid>(host, &AfterBuildRouteValid);CivRegisterReplace<CivHooks::BuildRouteValid>(host, &ReplaceBuildRouteValid);
Code
2657/// Build Route path finder - check validity of a coordinate2658int BuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2659{2660 CvPlot* pNewPlot;26612662 if(parent == NULL)2663 {2664 return TRUE;2665 }26662667 int iFlags = finder->GetInfo();2668 PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);26692670 CvPlayer& thisPlayer = GET_PLAYER(ePlayer);2671 bool bThisPlayerIsMinor = thisPlayer.isMinorCiv();26722673 pNewPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);2674 if(!bThisPlayerIsMinor && !(pNewPlot->isRevealed(thisPlayer.getTeam())))2675 {2676 return FALSE;2677 }26782679 if(pNewPlot->isWater())2680 {2681 return FALSE;2682 }26832684 if(pNewPlot->isImpassable() || pNewPlot->isMountain())2685 {2686 return FALSE;2687 }26882689 PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2690 if(ePlotOwnerPlayer != NO_PLAYER && !pNewPlot->IsFriendlyTerritory(ePlayer))2691 {2692 PlayerTypes eMajorPlayer = NO_PLAYER;2693 PlayerTypes eMinorPlayer = NO_PLAYER;2694 bool bPlotOwnerIsMinor = GET_PLAYER(ePlotOwnerPlayer).isMinorCiv();2695 if(bThisPlayerIsMinor && !bPlotOwnerIsMinor)2696 {2697 eMajorPlayer = ePlotOwnerPlayer;2698 eMinorPlayer = ePlayer;2699 }2700 else if(bPlotOwnerIsMinor && !bThisPlayerIsMinor)2701 {2702 eMajorPlayer = ePlayer;2703 eMinorPlayer = ePlotOwnerPlayer;2704 }2705 else2706 {2707 return FALSE;2708 }27092710 if(!GET_PLAYER(eMinorPlayer).GetMinorCivAI()->IsActiveQuestForPlayer(eMajorPlayer, MINOR_CIV_QUEST_ROUTE))2711 {2712 return FALSE;2713 }2714 }27152716 return TRUE;2717}
Calls
- CvAStar::GetInfo()
- CvGlobals::getMap()
- CvMap::plotUnchecked(int, int) const
- CvMinorCivAI::IsActiveQuestForPlayer(PlayerTypes, MinorCivQuestTypes)
- CvPlayer::GetMinorCivAI() const
- CvPlayer::getTeam() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getOwner() const
- CvPlot::IsFriendlyTerritory(PlayerTypes) const
- CvPlot::isImpassable() const
- CvPlot::isMountain() const
- CvPlot::isRevealed(TeamTypes) const
- CvPlot::isWater() const