Bazaar developer reference

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

Defined in
CvAStar.cpp, line 2219
Hook name
CivHooks::InfluenceCost

Hooks

static bool BeforeInfluenceCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterInfluenceCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceInfluenceCost(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::InfluenceCost>(host, &BeforeInfluenceCost);CivRegisterAfter<CivHooks::InfluenceCost>(host, &AfterInfluenceCost);CivRegisterReplace<CivHooks::InfluenceCost>(host, &ReplaceInfluenceCost);

Code

2218/// Influence path finder - compute cost of a path2219int InfluenceCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2220{2221	int iCost = 0;2222	bool bDifferentOwner = false;2223	if(parent->m_pParent || GC.getUSE_FIRST_RING_INFLUENCE_TERRAIN_COST())2224	{2225		CvMap& kMap = GC.getMap();2226		CvPlot* pFromPlot = kMap.plotUnchecked(parent->m_iX, parent->m_iY);2227		CvPlot* pToPlot = kMap.plotUnchecked(node->m_iX, node->m_iY);2228		CvPlot* pSourcePlot = kMap.plotUnchecked(finder->GetStartX(), finder->GetStartY());22292230		int iRange = 0;2231		if(pointer)2232		{2233			iRange = *(int*)pointer;2234		}2235		if(iRange >= 0)2236		{2237			if(pToPlot->getOwner() != NO_PLAYER && pSourcePlot->getOwner() != NO_PLAYER && pToPlot->getOwner() != pSourcePlot->getOwner())2238				bDifferentOwner = true;2239		}22402241		if(pFromPlot->isRiverCrossing(directionXY(pFromPlot, pToPlot)))2242			iCost += GC.getINFLUENCE_RIVER_COST();22432244		// Mountain Cost2245		if(pToPlot->isMountain())2246			iCost += GC.getINFLUENCE_MOUNTAIN_COST();2247		// Not a mountain - use the terrain cost2248		else2249		{2250			// Hill cost2251			if(pToPlot->isHills())2252				iCost += GC.getINFLUENCE_HILL_COST();2253			iCost += GC.getTerrainInfo(pToPlot->getTerrainType())->getInfluenceCost();2254			iCost += ((pToPlot->getFeatureType() == NO_FEATURE) ? 0 : GC.getFeatureInfo(pToPlot->getFeatureType())->getInfluenceCost());2255		}2256	}2257	else2258	{2259		iCost = 1;2260	}2261	iCost = std::max(1,iCost);2262	iCost = std::min(3,iCost);2263	if (bDifferentOwner)2264	{2265		iCost += 15;2266	}2267	return iCost;2268}

Calls

Called by