Bazaar developer reference

CanReachInXTurns(UnitHandle, CvPlot *, int, bool, int *)

Defined in
CvAStar.cpp, line 3792
Hook name
CivHooks::CanReachInXTurns

Hooks

static bool BeforeCanReachInXTurns(UnitHandle pUnit, CvPlot* pTarget, int iTurns, bool bIgnoreUnits, int* piTurns, bool& result);static void AfterCanReachInXTurns(UnitHandle pUnit, CvPlot* pTarget, int iTurns, bool bIgnoreUnits, int* piTurns, bool& result);static bool ReplaceCanReachInXTurns(bool (*original)(UnitHandle, CvPlot*, int, bool, int*), UnitHandle pUnit, CvPlot* pTarget, int iTurns, bool bIgnoreUnits, int* piTurns);CivRegisterBefore<CivHooks::CanReachInXTurns>(host, &BeforeCanReachInXTurns);CivRegisterAfter<CivHooks::CanReachInXTurns>(host, &AfterCanReachInXTurns);CivRegisterReplace<CivHooks::CanReachInXTurns>(host, &ReplaceCanReachInXTurns);

Code

3792bool CanReachInXTurns(UnitHandle pUnit, CvPlot* pTarget, int iTurns, bool bIgnoreUnits, int* piTurns /* = NULL */)3793{3794	int iDistance;37953796	if(!pTarget)3797	{3798		return false;3799	}38003801	// Compare distance to movement rate3802	iDistance = plotDistance(pUnit->getX(), pUnit->getY(), pTarget->getX(), pTarget->getY());3803	// KWG: If the unit is a land unit that can embark, baseMoves() is only going to give correct value if the starting and ending locations3804	//		are in the same domain (LAND vs. SEA) and no transition occurs.3805	if(iTurns == 0 && iDistance >= pUnit->baseMoves())3806	{3807		return false;3808	}38093810	else if(iTurns > 0 && iDistance > (pUnit->baseMoves() * iTurns))3811	{3812		return false;3813	}38143815	// Distance not too far, now use pathfinder3816	else3817	{3818		int iTurnsCalculated = TurnsToReachTarget(pUnit, pTarget, false /*bReusePaths*/, bIgnoreUnits);3819		if (piTurns)3820			*piTurns = iTurnsCalculated;3821		return (iTurnsCalculated <= iTurns);3822	}3823}

Calls

Called by