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
- CvAStar::GetInfo()
- CvFeatureInfo::getMovementCost() const
- CvGame::getGameTurn()
- CvGlobals::getFeatureInfo(FeatureTypes)
- CvGlobals::getGame()
- CvGlobals::getMap()
- CvGlobals::getTerrainInfo(TerrainTypes)
- CvMap::plotUnchecked(int, int) const
- CvPlayer::getTeam() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlot::GetBuilderAIScratchPadPlayer() const
- CvPlot::GetBuilderAIScratchPadTurn() const
- CvPlot::getFeatureType() const
- CvPlot::getRouteType() const
- CvPlot::getTerrainType() const
- CvTerrainInfo::getMovementCost() const