TradeRouteWaterValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 4170
- Hook name
CivHooks::TradeRouteWaterValid
Hooks
static bool BeforeTradeRouteWaterValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterTradeRouteWaterValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceTradeRouteWaterValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::TradeRouteWaterValid>(host, &BeforeTradeRouteWaterValid);CivRegisterAfter<CivHooks::TradeRouteWaterValid>(host, &AfterTradeRouteWaterValid);CivRegisterReplace<CivHooks::TradeRouteWaterValid>(host, &ReplaceTradeRouteWaterValid);
Code
4170int TradeRouteWaterValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)4171{4172 if(parent == NULL)4173 {4174 return TRUE;4175 }41764177 const TradePathCacheData* pCacheData = reinterpret_cast<const TradePathCacheData*>(finder->GetScratchBuffer());41784179 CvMap& kMap = GC.getMap();4180 CvPlot* pNewPlot = kMap.plotUnchecked(node->m_iX, node->m_iY);41814182#if defined(MOD_GLOBAL_PASSABLE_FORTS)4183 if (!(pNewPlot->isCity() || pNewPlot->isPassableImprovement()))4184#else4185 if (!pNewPlot->isCity())4186#endif4187 {4188 if (!pNewPlot->isWater())4189 {4190 return FALSE;4191 }41924193 if (pNewPlot->getTerrainType() != (TerrainTypes) GC.getSHALLOW_WATER_TERRAIN()) // Quicker shallow water test since we know that the plot is water already4194 {4195 if (!pCacheData->CanEmbarkAllWaterPassage())4196 {4197 return FALSE;4198 }4199 }42004201 CvPlot* pParentPlot = kMap.plotUnchecked(parent->m_iX, parent->m_iY);4202#if defined(MOD_GLOBAL_PASSABLE_FORTS)4203 if (!(pParentPlot->isCity() || pParentPlot->isPassableImprovement()))4204#else4205 if (!pParentPlot->isCity())4206#endif4207 {4208 if(pParentPlot->getArea() != pNewPlot->getArea())4209 {4210 return FALSE;4211 }4212 }42134214 if(pNewPlot->isImpassable())4215 {4216 return FALSE;4217 }4218 }42194220 return TRUE;4221}
Calls
- CvAStar::GetScratchBuffer()
- CvGlobals::getMap()
- CvGlobals::getSHALLOW_WATER_TERRAIN()
- CvMap::plotUnchecked(int, int) const
- CvPlot::getArea() const
- CvPlot::getTerrainType() const
- CvPlot::isCity() const
- CvPlot::isImpassable() const
- CvPlot::isPassableImprovement() const
- CvPlot::isWater() const
- TradePathCacheData::CanEmbarkAllWaterPassage() const