CvUnit::upgradePrice(UnitTypes) const
- Defined in
- CvUnit.cpp, line 11160
- Class
- CvUnit
- Hook name
CivHooks::CvUnit_upgradePrice
Hooks
static bool BeforeCvUnit_upgradePrice(const CvUnit* self, UnitTypes eUnit, int& result);static void AfterCvUnit_upgradePrice(const CvUnit* self, UnitTypes eUnit, int& result);static int ReplaceCvUnit_upgradePrice(int (*original)(const CvUnit*, UnitTypes), const CvUnit* self, UnitTypes eUnit);CivRegisterBefore<CivHooks::CvUnit_upgradePrice>(host, &BeforeCvUnit_upgradePrice);CivRegisterAfter<CivHooks::CvUnit_upgradePrice>(host, &AfterCvUnit_upgradePrice);CivRegisterReplace<CivHooks::CvUnit_upgradePrice>(host, &ReplaceCvUnit_upgradePrice);
Code
11159/// How much does it cost to upgrade this Unit to a shiny new eUnit?11160int CvUnit::upgradePrice(UnitTypes eUnit) const11161{11162 VALIDATE_OBJECT11163 int iPrice = 0;11164 11165 CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);11166 if(pkUnitInfo == NULL)11167 {11168 return 0;11169 }1117011171 if(isBarbarian())11172 {11173 return 0;11174 }1117511176 iPrice = /*10*/ GC.getBASE_UNIT_UPGRADE_COST();1117711178 CvPlayerAI& kPlayer = GET_PLAYER(getOwner());1117911180 iPrice += (std::max(0, (kPlayer.getProductionNeeded(eUnit) - kPlayer.getProductionNeeded(getUnitType()))) * /*2*/ GC.getUNIT_UPGRADE_COST_PER_PRODUCTION());1118111182 // Upgrades for later units are more expensive11183 const TechTypes eTech = (TechTypes) pkUnitInfo->GetPrereqAndTech();11184 CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);11185 if(pkTechInfo)11186 {11187 const EraTypes eUpgradeEra = (EraTypes) pkTechInfo->GetEra();1118811189 double fMultiplier = 1.0f;11190 fMultiplier += (eUpgradeEra* /*0.3*/ GC.getUNIT_UPGRADE_COST_MULTIPLIER_PER_ERA());1119111192 iPrice = int(iPrice * fMultiplier);11193 }1119411195 if(!isHuman() && !kPlayer.IsAITeammateOfHuman() && !isBarbarian())11196 {11197 iPrice *= GC.getGame().getHandicapInfo().getAIUnitUpgradePercent();11198 iPrice /= 100;1119911200 iPrice *= std::max(0, ((GC.getGame().getHandicapInfo().getAIPerEraModifier() * GET_TEAM(getTeam()).GetCurrentEra()) + 100));11201 iPrice /= 100;11202 }1120311204 // Discount11205 iPrice -= (iPrice * getUpgradeDiscount()) / 100;1120611207 // Mod (Policies, etc.)11208 int iMod = kPlayer.GetUnitUpgradeCostMod();11209 iPrice *= (100 + iMod);11210 iPrice /= 100;1121111212 // Apply exponent11213 iPrice = (int) pow((double) iPrice, (double) /*1.0f*/ GC.getUNIT_UPGRADE_COST_EXPONENT());1121411215 // Make the number not be funky11216 int iDivisor = /*5*/ GC.getUNIT_UPGRADE_COST_VISIBLE_DIVISOR();11217 iPrice /= iDivisor;11218 iPrice *= iDivisor;1121911220 return iPrice;11221}
Calls
- CvGame::getHandicapInfo() const
- CvGlobals::getBASE_UNIT_UPGRADE_COST()
- CvGlobals::getGame()
- CvGlobals::getTechInfo(TechTypes)
- CvGlobals::getUNIT_UPGRADE_COST_EXPONENT()
- CvGlobals::getUNIT_UPGRADE_COST_MULTIPLIER_PER_ERA()
- CvGlobals::getUNIT_UPGRADE_COST_PER_PRODUCTION()
- CvGlobals::getUNIT_UPGRADE_COST_VISIBLE_DIVISOR()
- CvGlobals::getUnitInfo(UnitTypes)
- CvHandicapInfo::getAIPerEraModifier() const
- CvHandicapInfo::getAIUnitUpgradePercent() const
- CvPlayer::getProductionNeeded(UnitTypes) const
- CvPlayer::GetUnitUpgradeCostMod() const
- CvPlayer::IsAITeammateOfHuman() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvTeam::GetCurrentEra() const
- CvTeam::getTeam(TeamTypes)
- CvTechEntry::GetEra() const
- CvUnit::getOwner() const
- CvUnit::getTeam() const
- CvUnit::getUnitType() const
- CvUnit::getUpgradeDiscount() const
- CvUnit::isBarbarian() const
- CvUnit::isHuman() const
- CvUnitEntry::GetPrereqAndTech() const
powstd::max