Bazaar developer reference

UIPathValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)

Defined in
CvAStar.cpp, line 3224
Hook name
CivHooks::UIPathValid

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}

Calls

Called by