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
- CvAStar::GetStartX()
- CvAStar::GetStartY()
- CvFeatureInfo::getInfluenceCost() const
- CvGlobals::getFeatureInfo(FeatureTypes)
- CvGlobals::getINFLUENCE_HILL_COST()
- CvGlobals::getINFLUENCE_MOUNTAIN_COST()
- CvGlobals::getINFLUENCE_RIVER_COST()
- CvGlobals::getMap()
- CvGlobals::getTerrainInfo(TerrainTypes)
- CvGlobals::getUSE_FIRST_RING_INFLUENCE_TERRAIN_COST()
- CvMap::plotUnchecked(int, int) const
- CvPlot::getFeatureType() const
- CvPlot::getOwner() const
- CvPlot::getTerrainType() const
- CvPlot::isHills() const
- CvPlot::isMountain() const
- CvPlot::isRiverCrossing(DirectionTypes) const
- CvTerrainInfo::getInfluenceCost() const
- directionXY(const CvPlot *, const CvPlot *)
std::maxstd::min