Bazaar developer reference

CvMilitaryAI::GetCoastalPlotAdjacentToTarget(CvPlot *, CvArmyAI *) const

Defined in
CvMilitaryAI.cpp, line 1510
Class
CvMilitaryAI
Hook name
CivHooks::CvMilitaryAI_GetCoastalPlotAdjacentToTarget

Hooks

static bool BeforeCvMilitaryAI_GetCoastalPlotAdjacentToTarget(const CvMilitaryAI* self, CvPlot * pTarget, CvArmyAI * pArmy, CvPlot*& result);static void AfterCvMilitaryAI_GetCoastalPlotAdjacentToTarget(const CvMilitaryAI* self, CvPlot * pTarget, CvArmyAI * pArmy, CvPlot*& result);static CvPlot* ReplaceCvMilitaryAI_GetCoastalPlotAdjacentToTarget(CvPlot* (*original)(const CvMilitaryAI*, CvPlot *, CvArmyAI *), const CvMilitaryAI* self, CvPlot * pTarget, CvArmyAI * pArmy);CivRegisterBefore<CivHooks::CvMilitaryAI_GetCoastalPlotAdjacentToTarget>(host, &BeforeCvMilitaryAI_GetCoastalPlotAdjacentToTarget);CivRegisterAfter<CivHooks::CvMilitaryAI_GetCoastalPlotAdjacentToTarget>(host, &AfterCvMilitaryAI_GetCoastalPlotAdjacentToTarget);CivRegisterReplace<CivHooks::CvMilitaryAI_GetCoastalPlotAdjacentToTarget>(host, &ReplaceCvMilitaryAI_GetCoastalPlotAdjacentToTarget);

Code

1510CvPlot* CvMilitaryAI::GetCoastalPlotAdjacentToTarget(CvPlot *pTarget, CvArmyAI *pArmy) const1511{1512	CvPlot *pCoastalPlot = NULL;1513	UnitHandle pInitialUnit;1514	int iBestDistance = MAX_INT;1515	int iUnitID = -1;1516	if (pArmy)1517	{1518		iUnitID = pArmy->GetFirstUnitID();1519		pInitialUnit = m_pPlayer->getUnit(iUnitID);1520	}15211522	// Find a coastal water tile adjacent to enemy city1523	for(int iDirectionLoop = 0; iDirectionLoop < NUM_DIRECTION_TYPES; ++iDirectionLoop)1524	{1525		CvPlot* pAdjacentPlot = plotDirection(pTarget->getX(), pTarget->getY(), ((DirectionTypes)iDirectionLoop));1526		if(pAdjacentPlot != NULL && pAdjacentPlot->isWater() && pAdjacentPlot->isShallowWater())1527		{1528			// Check for path if we have a unit, otherwise don't worry about it1529			if(pInitialUnit)1530			{1531				if (TurnsToReachTarget(pInitialUnit, pAdjacentPlot, false /*bReusePaths*/, true /*bIgnoreUnits*/, true /*bIgnoreStacking*/) < MAX_INT)1532				{1533					int iDistance = plotDistance(pInitialUnit->getX(), pInitialUnit->getY(), pTarget->getX(), pTarget->getY());1534					if (iDistance < iBestDistance)1535					{1536						iBestDistance = iDistance;1537						pCoastalPlot = pAdjacentPlot;1538					}1539				}1540			}1541			else1542			{1543				return pAdjacentPlot;1544			}1545		}1546	}15471548	return pCoastalPlot;1549}

Calls

Called by