Hooks
static bool BeforeUIPathValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterUIPathValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceUIPathValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::UIPathValid>(host, &BeforeUIPathValid);CivRegisterAfter<CivHooks::UIPathValid>(host, &AfterUIPathValid);CivRegisterReplace<CivHooks::UIPathValid>(host, &ReplaceUIPathValid);
Code
3223/// UI path finder - check validity of a coordinate3224int UIPathValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)3225{3226 if (parent == NULL)3227 {3228 return TRUE;3229 }32303231 if(node->m_iData2 > 3)3232 {3233 return FALSE;3234 }32353236 CvPlot* pToPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);32373238 CvUnit* pUnit = ((CvUnit*)pointer);32393240 if(!pToPlot->isRevealed(pUnit->getTeam()))3241 {3242 if(pUnit->getNoRevealMapCount() > 0)3243 {3244 return FALSE;3245 }3246 }32473248 if(pToPlot->isVisible(pUnit->getTeam()) && pToPlot->isVisibleEnemyUnit(pUnit))3249 {3250 if (!pUnit->canMoveInto(*pToPlot, CvUnit::MOVEFLAG_ATTACK))3251 return FALSE;3252 }32533254 if(pUnit->getDomainType() == DOMAIN_LAND)3255 {3256 int iGroupAreaID = pUnit->getArea();3257 if(pToPlot->getArea() != iGroupAreaID)3258 {3259 if(!(pToPlot->isAdjacentToArea(iGroupAreaID)))3260 {3261 // antonjs: Added for Smoky Skies scenario. Allows move range to show correctly for airships,3262 // which move over land and sea plots equally (canMoveAllTerrain)3263 if (!pUnit->canMoveAllTerrain())3264 {3265#if defined(MOD_BUGFIX_HOVERING_PATHFINDER)3266 if (!(pUnit->IsHoveringUnit() && (pToPlot->isShallowWater() || pToPlot->getFeatureType() == FEATURE_ICE))) {3267 return FALSE;3268 }3269#else3270 return FALSE;3271#endif3272 }3273 }3274 }3275 }32763277 if(!pUnit->canEnterTerrain(*pToPlot, CvUnit::MOVEFLAG_ATTACK))3278 {3279 return FALSE;3280 }32813282 if(!PathValid(parent,node,data,pointer,finder))3283 {3284 return FALSE;3285 }32863287 return TRUE;3288}