Bazaar developer reference

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

Defined in
CvAStar.cpp, line 2614
Hook name
CivHooks::BuildRouteCost

Hooks

static bool BeforeBuildRouteCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterBuildRouteCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceBuildRouteCost(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::BuildRouteCost>(host, &BeforeBuildRouteCost);CivRegisterAfter<CivHooks::BuildRouteCost>(host, &AfterBuildRouteCost);CivRegisterReplace<CivHooks::BuildRouteCost>(host, &ReplaceBuildRouteCost);

Code

2613/// Build route cost2614int BuildRouteCost(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2615{2616	CvPlot* pPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);2617	int iFlags = finder->GetInfo();2618	PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);2619	TeamTypes eTeam = GET_PLAYER(ePlayer).getTeam();26202621	int iRoute = iFlags & 0xFF00;2622	iRoute = iRoute >> 8;2623	iRoute = iRoute - 1;2624	RouteTypes eRoute = (RouteTypes)(iRoute);26252626	if(pPlot->getRouteType() != NO_ROUTE)2627	{2628		int iReturnValue = PATH_BUILD_ROUTE_EXISTING_ROUTE_WEIGHT;2629		if(pPlot->getRouteType() == eRoute)2630		{2631			iReturnValue = 1;2632		}2633		return iReturnValue;2634	}26352636	int iMaxValue = 1500;26372638	// if the plot is on a removable feature, it tends to be a good idea to build a road here2639	int iMovementCost = ((pPlot->getFeatureType() == NO_FEATURE) ? GC.getTerrainInfo(pPlot->getTerrainType())->getMovementCost() : GC.getFeatureInfo(pPlot->getFeatureType())->getMovementCost());26402641	// calculate the max value based on how much of a movement increase we get2642	if(iMovementCost + 1 != 0)2643	{2644		iMaxValue = iMaxValue / 2 + iMaxValue / (iMovementCost + 1);2645	}26462647	// if the tile already been tagged for building a road, then provide a discount2648	if(pPlot->GetBuilderAIScratchPadTurn() == GC.getGame().getGameTurn() && pPlot->GetBuilderAIScratchPadPlayer() == ePlayer)2649	{2650		iMaxValue = (int)(iMaxValue * PATH_BUILD_ROUTE_ALREADY_FLAGGED_DISCOUNT);2651	}26522653	return iMaxValue;2654}

Calls

Called by