StepValidAnyArea(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 2109
- Hook name
CivHooks::StepValidAnyArea
Hooks
static bool BeforeStepValidAnyArea(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterStepValidAnyArea(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceStepValidAnyArea(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::StepValidAnyArea>(host, &BeforeStepValidAnyArea);CivRegisterAfter<CivHooks::StepValidAnyArea>(host, &AfterStepValidAnyArea);CivRegisterReplace<CivHooks::StepValidAnyArea>(host, &ReplaceStepValidAnyArea);
Code
2108/// Step path finder - check validity of a coordinate (special case that allows any area)2109int StepValidAnyArea(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2110{2111 if(parent == NULL)2112 {2113 return TRUE;2114 }21152116 int iFlags = finder->GetInfo();2117 PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);21182119 PlayerTypes eEnemy = *(PlayerTypes*)pointer;21202121 CvPlayer& thisPlayer = GET_PLAYER(ePlayer);21222123 CvMap& kMap = GC.getMap();2124 CvPlot* pNewPlot = kMap.plotUnchecked(node->m_iX, node->m_iY);21252126 //if(kMap.plotUnchecked(parent->m_iX, parent->m_iY)->getArea() != pNewPlot->getArea())2127 //{2128 // return FALSE;2129 //}21302131 if(pNewPlot->isImpassable())2132 {2133 return FALSE;2134 }21352136 // Ocean hex and team can't navigate on oceans?2137 if (!GET_TEAM(thisPlayer.getTeam()).getEmbarkedAllWaterPassage())2138 {2139 if (pNewPlot->getTerrainType() == TERRAIN_OCEAN)2140 {2141 return FALSE;2142 }2143 }21442145 PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2146 if (ePlotOwnerPlayer != NO_PLAYER && ePlotOwnerPlayer != eEnemy && !pNewPlot->IsFriendlyTerritory(ePlayer))2147 {2148 CvPlayer& plotOwnerPlayer = GET_PLAYER(ePlotOwnerPlayer);2149 bool bPlotOwnerIsMinor = plotOwnerPlayer.isMinorCiv();21502151 if(!bPlotOwnerIsMinor)2152 {2153 TeamTypes eMyTeam = thisPlayer.getTeam();2154 TeamTypes ePlotOwnerTeam = plotOwnerPlayer.getTeam();21552156 if(!atWar(eMyTeam, ePlotOwnerTeam))2157 {2158 return FALSE;2159 }2160 }2161 }21622163 return TRUE;2164}
Calls
- atWar(TeamTypes, TeamTypes)
- CvAStar::GetInfo()
- CvGlobals::getMap()
- CvMap::plotUnchecked(int, int) const
- CvPlayer::getTeam() const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::getOwner() const
- CvPlot::getTerrainType() const
- CvPlot::IsFriendlyTerritory(PlayerTypes) const
- CvPlot::isImpassable() const
- CvTeam::getEmbarkedAllWaterPassage() const
- CvTeam::getTeam(TeamTypes)