Bazaar developer reference

CvBuilderTaskingAI::FindTurnsAway(CvUnit *, CvPlot *, bool)

Defined in
CvBuilderTaskingAI.cpp, line 1864
Class
CvBuilderTaskingAI
Hook name
CivHooks::CvBuilderTaskingAI_FindTurnsAway

Hooks

static bool BeforeCvBuilderTaskingAI_FindTurnsAway(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit, int& result);static void AfterCvBuilderTaskingAI_FindTurnsAway(CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit, int& result);static int ReplaceCvBuilderTaskingAI_FindTurnsAway(int (*original)(CvBuilderTaskingAI*, CvUnit*, CvPlot*, bool), CvBuilderTaskingAI* self, CvUnit* pUnit, CvPlot* pPlot, bool bLimit);CivRegisterBefore<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &BeforeCvBuilderTaskingAI_FindTurnsAway);CivRegisterAfter<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &AfterCvBuilderTaskingAI_FindTurnsAway);CivRegisterReplace<CivHooks::CvBuilderTaskingAI_FindTurnsAway>(host, &ReplaceCvBuilderTaskingAI_FindTurnsAway);

Code

1862/// Determines if the builder can get to the plot. Returns -1 if no path can be found, otherwise it returns the # of turns to get there1863#if defined(MOD_UNITS_LOCAL_WORKERS) || defined(MOD_AI_SECONDARY_WORKERS)1864int CvBuilderTaskingAI::FindTurnsAway(CvUnit* pUnit, CvPlot* pPlot, bool bLimit)1865#else1866int CvBuilderTaskingAI::FindTurnsAway(CvUnit* pUnit, CvPlot* pPlot)1867#endif1868{1869	// If this plot is far away, we'll just use its distance as an estimate of the time to get there (to avoid hitting the path finder)1870	// We'll be sure to check later to make sure we have a real path before we execute this1871	if(pUnit->getDomainType() == DOMAIN_LAND && pUnit->plot()->area() != pPlot->area() && !pUnit->CanEverEmbark())1872	{1873		return -1;1874	}18751876	int iPlotDistance = plotDistance(pUnit->getX(), pUnit->getY(), pPlot->getX(), pPlot->getY());18771878#if defined(MOD_UNITS_LOCAL_WORKERS) || defined(MOD_AI_SECONDARY_WORKERS)1879	if (bLimit) {1880		int iLimit = iPlotDistance;1881		1882#if defined(MOD_UNITS_LOCAL_WORKERS)1883		if (MOD_UNITS_LOCAL_WORKERS && GET_PLAYER(pUnit->getOwner()).isHuman()) {1884			iLimit = (pUnit->getDomainType() == DOMAIN_SEA) ? gCustomMods.getOption("UNITS_LOCAL_WORKERS_WATERLIMIT", 10) : gCustomMods.getOption("UNITS_LOCAL_WORKERS_LANDLIMIT", 6);1885		}1886#endif18871888#if defined(MOD_AI_SECONDARY_WORKERS)1889		if (MOD_AI_SECONDARY_WORKERS && pUnit->IsCombatUnit()) {1890			iLimit = gCustomMods.getOption("UNITS_LOCAL_WORKERS_COMBATLIMIT", 3);1891		}1892#endif18931894		if (iPlotDistance > iLimit) {1895			return -1;1896		}1897	}1898#endif18991900#if 11901	// Always return the raw distance1902	return iPlotDistance;1903#else1904	if(iPlotDistance >= GC.getAI_HOMELAND_ESTIMATE_TURNS_DISTANCE())1905	{1906		return iPlotDistance;1907	}1908	else1909	{1910		int iResult = TurnsToReachTarget(pUnit, pPlot);1911		if(iResult == MAX_INT)1912		{1913			return -1;1914		}19151916		return iResult;1917	}1918#endif1919}

Calls

Called by