Bazaar developer reference

CvCity::allUpgradesAvailable(UnitTypes, int) const

Defined in
CvCity.cpp, line 2495
Class
CvCity
Hook name
CivHooks::CvCity_allUpgradesAvailable

Hooks

static bool BeforeCvCity_allUpgradesAvailable(const CvCity* self, UnitTypes eUnit, int iUpgradeCount, UnitTypes& result);static void AfterCvCity_allUpgradesAvailable(const CvCity* self, UnitTypes eUnit, int iUpgradeCount, UnitTypes& result);static UnitTypes ReplaceCvCity_allUpgradesAvailable(UnitTypes (*original)(const CvCity*, UnitTypes, int), const CvCity* self, UnitTypes eUnit, int iUpgradeCount);CivRegisterBefore<CivHooks::CvCity_allUpgradesAvailable>(host, &BeforeCvCity_allUpgradesAvailable);CivRegisterAfter<CivHooks::CvCity_allUpgradesAvailable>(host, &AfterCvCity_allUpgradesAvailable);CivRegisterReplace<CivHooks::CvCity_allUpgradesAvailable>(host, &ReplaceCvCity_allUpgradesAvailable);

Code

2494// Returns one of the upgrades...2495UnitTypes CvCity::allUpgradesAvailable(UnitTypes eUnit, int iUpgradeCount) const2496{2497	VALIDATE_OBJECT2498	UnitTypes eUpgradeUnit;2499	bool bUpgradeFound;2500	bool bUpgradeAvailable;2501	bool bUpgradeUnavailable;25022503	CvAssertMsg(eUnit != NO_UNIT, "eUnit is expected to be assigned (not NO_UNIT)");25042505	CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);2506	if(pkUnitInfo == NULL)2507		return NO_UNIT;25082509	if(iUpgradeCount > GC.getNumUnitClassInfos())2510	{2511		return NO_UNIT;2512	}25132514	eUpgradeUnit = NO_UNIT;25152516	bUpgradeFound = false;2517	bUpgradeAvailable = false;2518	bUpgradeUnavailable = false;25192520	CvCivilizationInfo& thisCiv = getCivilizationInfo();25212522	for(int iI = 0; iI < GC.getNumUnitClassInfos(); iI++)2523	{2524		const UnitClassTypes eUnitClass = static_cast<UnitClassTypes>(iI);2525		CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo(eUnitClass);2526		if(pkUnitClassInfo)2527		{2528			if(pkUnitInfo->GetUpgradeUnitClass(iI))2529			{2530				const UnitTypes eLoopUnit = (UnitTypes) thisCiv.getCivilizationUnits(iI);25312532				if(eLoopUnit != NO_UNIT)2533				{2534					bUpgradeFound = true;25352536					const UnitTypes eTempUnit = allUpgradesAvailable(eLoopUnit, (iUpgradeCount + 1));25372538					if(eTempUnit != NO_UNIT)2539					{2540						eUpgradeUnit = eTempUnit;2541						bUpgradeAvailable = true;2542					}2543					else2544					{2545						bUpgradeUnavailable = true;2546					}2547				}2548			}2549		}2550	}25512552	if(iUpgradeCount > 0)2553	{2554		if(bUpgradeFound && bUpgradeAvailable)2555		{2556			CvAssertMsg(eUpgradeUnit != NO_UNIT, "eUpgradeUnit is expected to be assigned (not NO_UNIT)");2557			return eUpgradeUnit;2558		}25592560		if(canTrain(eUnit, false, false, false, true))2561		{2562			return eUnit;2563		}2564	}2565	else2566	{2567		if(bUpgradeFound && !bUpgradeUnavailable)2568		{2569			return eUpgradeUnit;2570		}2571	}25722573	return NO_UNIT;2574}

Calls

Called by