Bazaar developer reference

CvTacticalAI::FindBarbarianExploreTarget(UnitHandle)

Defined in
CvTacticalAI.cpp, line 10219
Class
CvTacticalAI
Hook name
CivHooks::CvTacticalAI_FindBarbarianExploreTarget

Hooks

static bool BeforeCvTacticalAI_FindBarbarianExploreTarget(CvTacticalAI* self, UnitHandle pUnit, CvPlot*& result);static void AfterCvTacticalAI_FindBarbarianExploreTarget(CvTacticalAI* self, UnitHandle pUnit, CvPlot*& result);static CvPlot* ReplaceCvTacticalAI_FindBarbarianExploreTarget(CvPlot* (*original)(CvTacticalAI*, UnitHandle), CvTacticalAI* self, UnitHandle pUnit);CivRegisterBefore<CivHooks::CvTacticalAI_FindBarbarianExploreTarget>(host, &BeforeCvTacticalAI_FindBarbarianExploreTarget);CivRegisterAfter<CivHooks::CvTacticalAI_FindBarbarianExploreTarget>(host, &AfterCvTacticalAI_FindBarbarianExploreTarget);CivRegisterReplace<CivHooks::CvTacticalAI_FindBarbarianExploreTarget>(host, &ReplaceCvTacticalAI_FindBarbarianExploreTarget);

Code

10218/// Scan nearby tiles for the best choice, borrowing code from the explore AI10219CvPlot* CvTacticalAI::FindBarbarianExploreTarget(UnitHandle pUnit)10220{10221	CvPlot* pBestMovePlot = NULL;10222	int iBestValue;10223	int iValue;1022410225	// Now looking for BEST score10226	iBestValue = 0;10227	int iMovementRange = pUnit->movesLeft() / GC.getMOVE_DENOMINATOR();10228	for(int iX = -iMovementRange; iX <= iMovementRange; iX++)10229	{10230		for(int iY = -iMovementRange; iY <= iMovementRange; iY++)10231		{10232			CvPlot* pPlot = plotXYWithRangeCheck(pUnit->getX(), pUnit->getY(), iX, iY, iMovementRange);10233			if(!pPlot)10234			{10235				continue;10236			}1023710238			if(pUnit->atPlot(*pPlot))10239			{10240				continue;10241			}1024210243			if(!pPlot->isRevealed(pUnit->getTeam()))10244			{10245				continue;10246			}1024710248			if(pPlot->area() != pUnit->area())10249			{10250				continue;10251			}1025210253			if(!CanReachInXTurns(pUnit, pPlot, 1))10254			{10255				continue;10256			}1025710258			// Value them based on their explore value10259			DomainTypes eDomain = pUnit->getDomainType();10260			iValue = CvEconomicAI::ScoreExplorePlot(pPlot, pUnit->getTeam(), pUnit->getUnitInfo().GetBaseSightRange(), eDomain);1026110262			// Add special value for popping up on hills or near enemy lands10263			if(pPlot->isAdjacentOwned())10264			{10265				iValue += 100;10266			}10267			else if(pPlot->isOwned())10268			{10269				iValue += 200;10270			}1027110272			// If still have no value, score equal to distance from my current plot10273			if(iValue == 0)10274			{10275				iValue = plotDistance(pUnit->getX(), pUnit->getY(), pPlot->getX(), pPlot->getY());10276			}1027710278			if(iValue > iBestValue)10279			{10280				pBestMovePlot = pPlot;10281				iBestValue = iValue;10282			}10283		}10284	}10285	return pBestMovePlot;10286}

Calls

Called by