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
- CvGlobals::getNumFlavorTypes()
- CvGlobals::getNumTechInfos()
- CvGlobals::getTechInfo(TechTypes)
- CvGlobals::getUnitInfo(UnitTypes)
- CvPlayer::GetPlayerTechs() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerTechs::CanResearch(TechTypes, bool) const
- CvTechEntry::GetFlavorValue(int) const
- CvUnitEntry::GetFlavorValue(int) const