Bazaar developer reference

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

Defined in
CvAStar.cpp, line 4101
Hook name
CivHooks::TradeRouteWaterPathCost

Hooks

static bool BeforeTradeRouteWaterPathCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterTradeRouteWaterPathCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceTradeRouteWaterPathCost(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::TradeRouteWaterPathCost>(host, &BeforeTradeRouteWaterPathCost);CivRegisterAfter<CivHooks::TradeRouteWaterPathCost>(host, &AfterTradeRouteWaterPathCost);CivRegisterReplace<CivHooks::TradeRouteWaterPathCost>(host, &ReplaceTradeRouteWaterPathCost);

Code

4100/// slewis's fault4101int TradeRouteWaterPathCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)4102{4103	CvMap& kMap = GC.getMap();4104	const TradePathCacheData* pCacheData = reinterpret_cast<const TradePathCacheData*>(finder->GetScratchBuffer());41054106	int iFromPlotX = parent->m_iX;4107	int iFromPlotY = parent->m_iY;4108	CvPlot* pFromPlot = kMap.plotUnchecked(iFromPlotX, iFromPlotY);41094110	int iToPlotX = node->m_iX;4111	int iToPlotY = node->m_iY;4112	CvPlot* pToPlot = kMap.plotUnchecked(iToPlotX, iToPlotY);41134114	int iBaseCost = 100;4115	int iCost = iBaseCost;41164117#if defined(MOD_GLOBAL_PASSABLE_FORTS)4118	if (!(pToPlot->isCity() || pToPlot->isPassableImprovement()))4119#else4120	if (!pToPlot->isCity())4121#endif4122	{4123		bool bIsAdjacentToLand = pFromPlot->isAdjacentToLand_Cached() && pToPlot->isAdjacentToLand_Cached();4124		if (!bIsAdjacentToLand)4125		{4126			iCost += 1;4127		}41284129		// if is enemy tile, avoid4130		TeamTypes eToPlotTeam = pToPlot->getTeam();4131		if (eToPlotTeam != NO_TEAM && pCacheData->getTeam().isAtWar(eToPlotTeam))4132		{4133			iCost += 1000; // slewis - is this too prohibitive? Too cheap?4134		}41354136		if (!pToPlot->isWater())4137		{4138#if defined(MOD_BUGFIX_MINOR)4139			// Due to the "times 100", this is only equivalent to 10 tiles, which for a water trade route is too few4140			// iCost += 1000;4141			iCost += 50 * 100;4142#else4143			iCost += 1000;4144#endif4145		}4146		else4147		{4148			if (pToPlot->getTerrainType() != (TerrainTypes) GC.getSHALLOW_WATER_TERRAIN())	// Quicker isShallowWater test, since we already know the plot is water4149			{4150				if (!pCacheData->CanEmbarkAllWaterPassage())4151				{4152					iCost += 1000;4153				}4154			}4155		}41564157		if(pToPlot->isImpassable())4158		{4159			iCost += 1000;4160		}4161	}41624163	FAssert(iCost != MAX_INT);4164	FAssert(iCost > 0);41654166	return iCost;4167}

Calls

Called by