CvUnit::GetStrategicResourceCombatPenalty() const
- Defined in
- CvUnit.cpp, line 12040
- Class
- CvUnit
- Hook name
CivHooks::CvUnit_GetStrategicResourceCombatPenalty
Hooks
static bool BeforeCvUnit_GetStrategicResourceCombatPenalty(const CvUnit* self, int& result);static void AfterCvUnit_GetStrategicResourceCombatPenalty(const CvUnit* self, int& result);static int ReplaceCvUnit_GetStrategicResourceCombatPenalty(int (*original)(const CvUnit*), const CvUnit* self);CivRegisterBefore<CivHooks::CvUnit_GetStrategicResourceCombatPenalty>(host, &BeforeCvUnit_GetStrategicResourceCombatPenalty);CivRegisterAfter<CivHooks::CvUnit_GetStrategicResourceCombatPenalty>(host, &AfterCvUnit_GetStrategicResourceCombatPenalty);CivRegisterReplace<CivHooks::CvUnit_GetStrategicResourceCombatPenalty>(host, &ReplaceCvUnit_GetStrategicResourceCombatPenalty);
Code
12039/// Over strategic resource limit?12040int CvUnit::GetStrategicResourceCombatPenalty() const12041{12042 int iPenalty = 0;1204312044 // barbs don't have resources12045 if(isBarbarian())12046 return iPenalty;1204712048 CvPlayerAI& kPlayer = GET_PLAYER(getOwner());1204912050 // Loop through all resources12051 ResourceTypes eResource;12052 int iNumResourceInfos = GC.getNumResourceInfos();12053 for(int iResourceLoop = 0; iResourceLoop < iNumResourceInfos; iResourceLoop++)12054 {12055 eResource = (ResourceTypes) iResourceLoop;1205612057 int iAvailable = kPlayer.getNumResourceAvailable(eResource);12058 if (kPlayer.isMinorCiv())12059 {12060 iAvailable += kPlayer.getResourceExport(eResource);12061 }1206212063 // Over resource limit?12064 if(iAvailable < 0)12065 {12066 if(m_pUnitInfo->GetResourceQuantityRequirement(eResource) > 0)12067 {12068 int iUsed = kPlayer.getNumResourceUsed(eResource);12069 int iMissing = iUsed - kPlayer.getNumResourceTotal(eResource);1207012071 CvAssertMsg(iUsed > 0, "Number of used resources is zero or negative, this is unexpected. Please send Anton your save file and version.");12072 if (iUsed <= 0)12073 continue;12074 CvAssertMsg(iMissing > 0, "Number of missing resources is zero or negative, this is unexpected. Please send Anton your save file and version.");12075 if (iMissing <= 0)12076 continue;1207712078 double dDeficit = (double) iMissing / (double) iUsed;12079 iPenalty += (int) floor((dDeficit) * GC.getSTRATEGIC_RESOURCE_EXHAUSTED_PENALTY()); // round down (for larger negative penalty)12080 }12081 }12082 }1208312084 iPenalty = max(iPenalty, GC.getSTRATEGIC_RESOURCE_EXHAUSTED_PENALTY());12085 return iPenalty;12086}
Calls
- CvGlobals::getNumResourceInfos()
- CvGlobals::getSTRATEGIC_RESOURCE_EXHAUSTED_PENALTY()
- CvPlayer::getNumResourceAvailable(ResourceTypes, bool) const
- CvPlayer::getNumResourceTotal(ResourceTypes, bool) const
- CvPlayer::getNumResourceUsed(ResourceTypes) const
- CvPlayer::getResourceExport(ResourceTypes) const
- CvPlayer::isMinorCiv() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvUnit::getOwner() const
- CvUnit::isBarbarian() const
- CvUnitEntry::GetResourceQuantityRequirement(int) const
floorstd::max