StepValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 2049
- Hook name
CivHooks::StepValid
Hooks
static bool BeforeStepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterStepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceStepValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::StepValid>(host, &BeforeStepValid);CivRegisterAfter<CivHooks::StepValid>(host, &AfterStepValid);CivRegisterReplace<CivHooks::StepValid>(host, &ReplaceStepValid);
Code
2048/// Step path finder - check validity of a coordinate2049int StepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2050{2051 if(parent == NULL)2052 {2053 return TRUE;2054 }20552056 int iFlags = finder->GetInfo();2057 PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);20582059 PlayerTypes eEnemy = *(PlayerTypes*)pointer;20602061 CvPlayer& thisPlayer = GET_PLAYER(ePlayer);20622063 CvMap& kMap = GC.getMap();2064 CvPlot* pNewPlot = kMap.plotUnchecked(node->m_iX, node->m_iY);20652066 if(kMap.plotUnchecked(parent->m_iX, parent->m_iY)->getArea() != pNewPlot->getArea())2067 {2068 return FALSE;2069 }20702071 if(pNewPlot->isImpassable() || pNewPlot->isMountain())2072 {2073 return FALSE;2074 }20752076 // Ocean hex and team can't navigate on oceans?2077 if (!GET_TEAM(thisPlayer.getTeam()).getEmbarkedAllWaterPassage())2078 {2079 if (pNewPlot->getTerrainType() == TERRAIN_OCEAN)2080 {2081 return FALSE;2082 }2083 }20842085 PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2086 if (ePlotOwnerPlayer != NO_PLAYER && ePlotOwnerPlayer != eEnemy && !pNewPlot->IsFriendlyTerritory(ePlayer))2087 {2088 CvPlayer& plotOwnerPlayer = GET_PLAYER(ePlotOwnerPlayer);2089 bool bPlotOwnerIsMinor = plotOwnerPlayer.isMinorCiv();20902091 if(!bPlotOwnerIsMinor)2092 {2093 TeamTypes eMyTeam = thisPlayer.getTeam();2094 TeamTypes ePlotOwnerTeam = plotOwnerPlayer.getTeam();20952096 if(!atWar(eMyTeam, ePlotOwnerTeam))2097 {2098 return FALSE;2099 }2100 }2101 }21022103 return TRUE;2104}
Calls
- atWar(TeamTypes, TeamTypes)
- CvAStar::GetInfo()
- CvGlobals::getMap()
- CvMap::plotUnchecked(int, int) const
- CvPlayer::getTeam() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getArea() const
- CvPlot::getOwner() const
- CvPlot::getTerrainType() const
- CvPlot::IsFriendlyTerritory(PlayerTypes) const
- CvPlot::isImpassable() const
- CvPlot::isMountain() const
- CvTeam::getEmbarkedAllWaterPassage() const
- CvTeam::getTeam(TeamTypes)