Bazaar developer reference

IgnoreUnitsDestValid(int, int, const void *, CvAStar *)

Defined in
CvAStar.cpp, line 1632
Hook name
CivHooks::IgnoreUnitsDestValid

Hooks

static bool BeforeIgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder, int& result);static void AfterIgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder, int& result);static int ReplaceIgnoreUnitsDestValid(int (*original)(int, int, const void*, CvAStar*), int iToX, int iToY, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::IgnoreUnitsDestValid>(host, &BeforeIgnoreUnitsDestValid);CivRegisterAfter<CivHooks::IgnoreUnitsDestValid>(host, &AfterIgnoreUnitsDestValid);CivRegisterReplace<CivHooks::IgnoreUnitsDestValid>(host, &ReplaceIgnoreUnitsDestValid);

Code

1631/// Ignore units path finder - is this end point for the path valid?1632int IgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder)1633{1634	CvUnit* pUnit;1635	CvPlot* pToPlot;1636	bool bAIControl;1637	CvMap& kMap = GC.getMap();16381639	pToPlot = kMap.plotUnchecked(iToX, iToY);16401641	pUnit = ((CvUnit*)pointer);1642	const UnitPathCacheData* pCacheData = reinterpret_cast<const UnitPathCacheData*>(finder->GetScratchBuffer());16431644	CvPlot* pUnitPlot = kMap.plotUnchecked(pUnit->getX(), pUnit->getY());1645	if(pUnitPlot == pToPlot)1646	{1647		return TRUE;1648	}16491650	if(pCacheData->IsImmobile())1651	{1652		return FALSE;1653	}16541655	if(pToPlot->isMountain() && (!pCacheData->isHuman() || pCacheData->IsAutomated()))1656	{1657		return FALSE;1658	}16591660	if ((finder->GetInfo() & CvUnit::MOVEFLAG_STAY_ON_LAND) && (pToPlot->isWater() && !pToPlot->IsAllowsWalkWater()))1661	{1662		return FALSE;1663	}16641665	bAIControl = pCacheData->IsAutomated();16661667	if(bAIControl)1668	{1669		if(pCacheData->getDomainType() == DOMAIN_LAND)1670		{1671			int iGroupAreaID = pUnit->area()->GetID();1672			if(pToPlot->getArea() != iGroupAreaID)1673			{1674				if(!(pToPlot->isAdjacentToArea(iGroupAreaID)))1675				{1676					return FALSE;1677				}1678			}1679		}1680	}16811682	TeamTypes eUnitTeam = pUnit->getTeam();16831684	if(!pToPlot->isRevealed(eUnitTeam))1685	{1686		if(pCacheData->isNoRevealMap())1687		{1688			return FALSE;1689		}1690	}16911692	if(bAIControl || pToPlot->isRevealed(eUnitTeam))1693	{1694		if(!pUnit->canEnterTerrain(*pToPlot, CvUnit::MOVEFLAG_PRETEND_CORRECT_EMBARK_STATE) || !pUnit->canEnterTerritory(eUnitTeam))1695		{1696			return FALSE;1697		}1698	}1699	return TRUE;1700}

Calls

Called by