Bazaar developer reference

CvCity::doDecay()

Defined in
CvCity.cpp, line 14986
Class
CvCity
Hook name
CivHooks::CvCity_doDecay

Hooks

static bool BeforeCvCity_doDecay(CvCity* self);static void AfterCvCity_doDecay(CvCity* self);static void ReplaceCvCity_doDecay(void (*original)(CvCity*), CvCity* self);CivRegisterBefore<CivHooks::CvCity_doDecay>(host, &BeforeCvCity_doDecay);CivRegisterAfter<CivHooks::CvCity_doDecay>(host, &AfterCvCity_doDecay);CivRegisterReplace<CivHooks::CvCity_doDecay>(host, &ReplaceCvCity_doDecay);

Code

14986void CvCity::doDecay()14987{14988	VALIDATE_OBJECT14989	AI_PERF_FORMAT("City-AI-perf.csv", ("CvCity::doDecay, Turn %03d, %s, %s", GC.getGame().getElapsedGameTurns(), GetPlayer()->getCivilizationShortDescription(), getName().c_str()) );14990	int iI;1499114992	int iBuildingProductionDecayTime = GC.getBUILDING_PRODUCTION_DECAY_TIME();14993	int iBuildingProductionDecayPercent = GC.getBUILDING_PRODUCTION_DECAY_PERCENT();1499414995	int iNumBuildingInfos = GC.getNumBuildingInfos();14996	for(iI = 0; iI < iNumBuildingInfos; iI++)14997	{14998		if(getProductionBuilding() != ((BuildingTypes)iI))14999		{15000			if(m_pCityBuildings->GetBuildingProduction((BuildingTypes)iI) > 0)15001			{15002				m_pCityBuildings->ChangeBuildingProductionTime(((BuildingTypes)iI), 1);1500315004				if(isHuman())15005				{15006					if(m_pCityBuildings->GetBuildingProductionTime((BuildingTypes)iI) > iBuildingProductionDecayTime)15007					{15008						m_pCityBuildings->SetBuildingProduction(((BuildingTypes)iI), ((m_pCityBuildings->GetBuildingProduction((BuildingTypes)iI) * iBuildingProductionDecayPercent) / 100));15009					}15010				}15011			}15012			else15013			{15014				m_pCityBuildings->SetBuildingProductionTime(((BuildingTypes)iI), 0);15015			}15016		}15017	}1501815019	int iUnitProductionDecayTime = GC.getUNIT_PRODUCTION_DECAY_TIME();15020	int iUnitProductionDecayPercent = GC.getUNIT_PRODUCTION_DECAY_PERCENT();1502115022	int iNumUnitInfos = GC.getNumUnitInfos();15023	for(iI = 0; iI < iNumUnitInfos; iI++)15024	{15025		const UnitTypes eUnit = static_cast<UnitTypes>(iI);15026		CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);15027		if(pkUnitInfo)15028		{15029			if(getProductionUnit() != eUnit)15030			{15031				if(getUnitProduction(eUnit) > 0)15032				{15033					changeUnitProductionTime(eUnit, 1);1503415035					if(isHuman())15036					{15037						if(getUnitProductionTime(eUnit) > iUnitProductionDecayTime)15038						{15039							setUnitProduction(eUnit, ((getUnitProduction(eUnit) * iUnitProductionDecayPercent) / 100));15040						}15041					}15042				}15043				else15044				{15045					setUnitProductionTime(eUnit, 0);15046				}15047			}15048		}15049	}15050}

Calls

Called by