Bazaar developer reference

StepValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)

Defined in
CvAStar.cpp, line 2049
Hook name
CivHooks::StepValid

Hooks

static bool BeforeStepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterStepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceStepValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::StepValid>(host, &BeforeStepValid);CivRegisterAfter<CivHooks::StepValid>(host, &AfterStepValid);CivRegisterReplace<CivHooks::StepValid>(host, &ReplaceStepValid);

Code

2048/// Step path finder - check validity of a coordinate2049int StepValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2050{2051	if(parent == NULL)2052	{2053		return TRUE;2054	}20552056	int iFlags = finder->GetInfo();2057	PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);20582059	PlayerTypes eEnemy = *(PlayerTypes*)pointer;20602061	CvPlayer& thisPlayer = GET_PLAYER(ePlayer);20622063	CvMap& kMap = GC.getMap();2064	CvPlot* pNewPlot = kMap.plotUnchecked(node->m_iX, node->m_iY);20652066	if(kMap.plotUnchecked(parent->m_iX, parent->m_iY)->getArea() != pNewPlot->getArea())2067	{2068		return FALSE;2069	}20702071	if(pNewPlot->isImpassable() || pNewPlot->isMountain())2072	{2073		return FALSE;2074	}20752076	// Ocean hex and team can't navigate on oceans?2077	if (!GET_TEAM(thisPlayer.getTeam()).getEmbarkedAllWaterPassage())2078	{2079		if (pNewPlot->getTerrainType() == TERRAIN_OCEAN)2080		{2081			return FALSE;2082		}2083	}20842085	PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2086	if (ePlotOwnerPlayer != NO_PLAYER && ePlotOwnerPlayer != eEnemy && !pNewPlot->IsFriendlyTerritory(ePlayer))2087	{2088		CvPlayer& plotOwnerPlayer = GET_PLAYER(ePlotOwnerPlayer);2089		bool bPlotOwnerIsMinor = plotOwnerPlayer.isMinorCiv();20902091		if(!bPlotOwnerIsMinor)2092		{2093			TeamTypes eMyTeam = thisPlayer.getTeam();2094			TeamTypes ePlotOwnerTeam = plotOwnerPlayer.getTeam();20952096			if(!atWar(eMyTeam, ePlotOwnerTeam))2097			{2098				return FALSE;2099			}2100		}2101	}21022103	return TRUE;2104}

Calls

Called by