IgnoreUnitsDestValid(int, int, const void *, CvAStar *)
- Defined in
- CvAStar.cpp, line 1632
- Hook name
CivHooks::IgnoreUnitsDestValid
Hooks
static bool BeforeIgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder, int& result);static void AfterIgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder, int& result);static int ReplaceIgnoreUnitsDestValid(int (*original)(int, int, const void*, CvAStar*), int iToX, int iToY, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::IgnoreUnitsDestValid>(host, &BeforeIgnoreUnitsDestValid);CivRegisterAfter<CivHooks::IgnoreUnitsDestValid>(host, &AfterIgnoreUnitsDestValid);CivRegisterReplace<CivHooks::IgnoreUnitsDestValid>(host, &ReplaceIgnoreUnitsDestValid);
Code
1631/// Ignore units path finder - is this end point for the path valid?1632int IgnoreUnitsDestValid(int iToX, int iToY, const void* pointer, CvAStar* finder)1633{1634 CvUnit* pUnit;1635 CvPlot* pToPlot;1636 bool bAIControl;1637 CvMap& kMap = GC.getMap();16381639 pToPlot = kMap.plotUnchecked(iToX, iToY);16401641 pUnit = ((CvUnit*)pointer);1642 const UnitPathCacheData* pCacheData = reinterpret_cast<const UnitPathCacheData*>(finder->GetScratchBuffer());16431644 CvPlot* pUnitPlot = kMap.plotUnchecked(pUnit->getX(), pUnit->getY());1645 if(pUnitPlot == pToPlot)1646 {1647 return TRUE;1648 }16491650 if(pCacheData->IsImmobile())1651 {1652 return FALSE;1653 }16541655 if(pToPlot->isMountain() && (!pCacheData->isHuman() || pCacheData->IsAutomated()))1656 {1657 return FALSE;1658 }16591660 if ((finder->GetInfo() & CvUnit::MOVEFLAG_STAY_ON_LAND) && (pToPlot->isWater() && !pToPlot->IsAllowsWalkWater()))1661 {1662 return FALSE;1663 }16641665 bAIControl = pCacheData->IsAutomated();16661667 if(bAIControl)1668 {1669 if(pCacheData->getDomainType() == DOMAIN_LAND)1670 {1671 int iGroupAreaID = pUnit->area()->GetID();1672 if(pToPlot->getArea() != iGroupAreaID)1673 {1674 if(!(pToPlot->isAdjacentToArea(iGroupAreaID)))1675 {1676 return FALSE;1677 }1678 }1679 }1680 }16811682 TeamTypes eUnitTeam = pUnit->getTeam();16831684 if(!pToPlot->isRevealed(eUnitTeam))1685 {1686 if(pCacheData->isNoRevealMap())1687 {1688 return FALSE;1689 }1690 }16911692 if(bAIControl || pToPlot->isRevealed(eUnitTeam))1693 {1694 if(!pUnit->canEnterTerrain(*pToPlot, CvUnit::MOVEFLAG_PRETEND_CORRECT_EMBARK_STATE) || !pUnit->canEnterTerritory(eUnitTeam))1695 {1696 return FALSE;1697 }1698 }1699 return TRUE;1700}
Calls
- CvArea::GetID() const
- CvAStar::GetInfo()
- CvAStar::GetScratchBuffer()
- CvGlobals::getMap()
- CvMap::plotUnchecked(int, int) const
- CvPlot::getArea() const
- CvPlot::isAdjacentToArea(int) const
- CvPlot::IsAllowsWalkWater() const
- CvPlot::isMountain() const
- CvPlot::isRevealed(TeamTypes) const
- CvPlot::isWater() const
- CvUnit::area() const
- CvUnit::canEnterTerrain(const CvPlot &, byte) const
- CvUnit::canEnterTerritory(TeamTypes, bool, bool, bool) const
- CvUnit::getTeam() const
- CvUnit::getX() const
- CvUnit::getY() const
- UnitPathCacheData::getDomainType() const
- UnitPathCacheData::IsAutomated() const
- UnitPathCacheData::isHuman() const
- UnitPathCacheData::IsImmobile() const
- UnitPathCacheData::isNoRevealMap() const