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}