Bazaar developer reference

getDiscoveryTech(UnitTypes, PlayerTypes)

Defined in
CvGameCoreUtils.cpp, line 653
Hook name
CivHooks::getDiscoveryTech

Hooks

static bool BeforegetDiscoveryTech(UnitTypes eUnit, PlayerTypes ePlayer, TechTypes& result);static void AftergetDiscoveryTech(UnitTypes eUnit, PlayerTypes ePlayer, TechTypes& result);static TechTypes ReplacegetDiscoveryTech(TechTypes (*original)(UnitTypes, PlayerTypes), UnitTypes eUnit, PlayerTypes ePlayer);CivRegisterBefore<CivHooks::getDiscoveryTech>(host, &BeforegetDiscoveryTech);CivRegisterAfter<CivHooks::getDiscoveryTech>(host, &AftergetDiscoveryTech);CivRegisterReplace<CivHooks::getDiscoveryTech>(host, &ReplacegetDiscoveryTech);

Code

653TechTypes getDiscoveryTech(UnitTypes eUnit, PlayerTypes ePlayer)654{655	TechTypes eBestTech = NO_TECH;656	CvPlayerAI& kPlayer = GET_PLAYER(ePlayer);657658	CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);659	if(pkUnitInfo)660	{661		int iBestValue = 0;662		for(int iI = 0; iI < GC.getNumTechInfos(); iI++)663		{664			const TechTypes eTech = static_cast<TechTypes>(iI);665			CvTechEntry* pkTechInfo = GC.getTechInfo(eTech);666			if(pkTechInfo)667			{668				if(kPlayer.GetPlayerTechs()->CanResearch(eTech))669				{670					int iValue = 0;671672					for(int iJ = 0; iJ < GC.getNumFlavorTypes(); iJ++)673					{674						iValue += (pkTechInfo->GetFlavorValue(iJ) * pkUnitInfo->GetFlavorValue(iJ));675					}676677					if(iValue > iBestValue)678					{679						iBestValue = iValue;680						eBestTech = eTech;681					}682				}683			}684		}685	}686687	return eBestTech;688}

Calls