Bazaar developer reference

CvPlayerTechs::Reset()

Defined in
CvTechClasses.cpp, line 685
Class
CvPlayerTechs
Hook name
CivHooks::CvPlayerTechs_Reset

Hooks

static bool BeforeCvPlayerTechs_Reset(CvPlayerTechs* self);static void AfterCvPlayerTechs_Reset(CvPlayerTechs* self);static void ReplaceCvPlayerTechs_Reset(void (*original)(CvPlayerTechs*), CvPlayerTechs* self);CivRegisterBefore<CivHooks::CvPlayerTechs_Reset>(host, &BeforeCvPlayerTechs_Reset);CivRegisterAfter<CivHooks::CvPlayerTechs_Reset>(host, &AfterCvPlayerTechs_Reset);CivRegisterReplace<CivHooks::CvPlayerTechs_Reset>(host, &ReplaceCvPlayerTechs_Reset);

Code

684/// Reset tech status array to all false685void CvPlayerTechs::Reset()686{687	int iI;688	CvBuildingXMLEntries* pkGameBuildings = GC.GetGameBuildings();689690	for(iI = 0; iI < m_pTechs->GetNumTechs(); iI++)691	{692		m_pabResearchingTech[iI] = false;693		m_piCivTechPriority[iI] = 1;694		m_piLocaleTechPriority[iI] = 1;695		m_peLocaleTechResources[iI] = NO_RESOURCE;696		m_peCivTechUniqueUnits[iI] = NO_UNIT;697		m_peCivTechUniqueBuildings[iI] = NO_BUILDING;698		m_peCivTechUniqueImprovements[iI] = NO_IMPROVEMENT;699	}700701	// Tweak tech priorities to recognize unique properties of this civ702	if(!m_pPlayer->isMinorCiv() && !m_pPlayer->isBarbarian() && m_pPlayer->getCivilizationType() != NO_CIVILIZATION)703	{704		CvCivilizationInfo* pkInfo = GC.getCivilizationInfo(m_pPlayer->getCivilizationType());705		if(pkInfo)706		{707			// Loop through all building classes708			for(iI = 0; iI < GC.getNumBuildingClassInfos(); iI++)709			{710				const BuildingTypes eBuilding = static_cast<BuildingTypes>(pkInfo->getCivilizationBuildings(iI));711				CvBuildingEntry* pkBuildingInfo = NULL;712713				if(eBuilding != -1)714					pkBuildingInfo = pkGameBuildings->GetEntry(eBuilding);715716				if(pkBuildingInfo)717				{718					// Is this one overridden for our civ?719					if(pkInfo->isCivilizationBuildingOverridden(iI))720					{721						int iTech = pkBuildingInfo->GetPrereqAndTech();722						if(iTech != NO_TECH)723						{724							m_piCivTechPriority[iTech] *= GC.getTECH_PRIORITY_UNIQUE_ITEM();725							m_peCivTechUniqueBuildings[iTech] = eBuilding;726						}727					}728				}729			}730731			// Loop through all units732			for(iI = 0; iI < GC.getNumUnitClassInfos(); iI++)733			{734				// Is this one overridden for our civ?735				if(pkInfo->isCivilizationUnitOverridden(iI))736				{737					UnitTypes eCivilizationUnit = static_cast<UnitTypes>(pkInfo->getCivilizationUnits(iI));738					if(eCivilizationUnit != NO_UNIT)739					{740						CvUnitEntry* pkUnitEntry = GC.getUnitInfo(eCivilizationUnit);741						if(pkUnitEntry)742						{743							int iTech = pkUnitEntry->GetPrereqAndTech();744							if(iTech != NO_TECH)745							{746								m_piCivTechPriority[iTech] *= GC.getTECH_PRIORITY_UNIQUE_ITEM();747								m_peCivTechUniqueUnits[iTech] = (UnitTypes)pkInfo->getCivilizationUnits(iI);748							}749						}750					}751				}752			}753754			// Loop through all improvements755			for(iI = 0; iI < GC.getNumImprovementInfos(); iI++)756			{757				CvImprovementEntry* pkImprovementEntry = GC.getImprovementInfo((ImprovementTypes)iI);758				if(pkImprovementEntry)759				{760					if(pkImprovementEntry->IsSpecificCivRequired() && pkImprovementEntry->GetRequiredCivilization() == m_pPlayer->getCivilizationType())761					{762						// Find corresponding build763						for(int jJ = 0; jJ < GC.getNumBuildInfos(); jJ++)764						{765							CvBuildInfo* pkBuildEntry = GC.getBuildInfo((BuildTypes)jJ);766							if(pkBuildEntry && pkBuildEntry->getImprovement() == iI)767							{768								int iTech = pkBuildEntry->getTechPrereq();769								if(iTech != NO_TECH)770								{771									m_piCivTechPriority[iTech] *= GC.getTECH_PRIORITY_UNIQUE_ITEM();772									m_peCivTechUniqueImprovements[iTech] = static_cast<ImprovementTypes>(iI);773								}774							}775						}776					}777				}778			}779		}780781		// Player Traits782		int iNumTraits = GC.getNumTraitInfos();783		for(int iTraitLoop = 0; iTraitLoop < iNumTraits; iTraitLoop++)784		{785			TraitTypes eTraitLoop = (TraitTypes) iTraitLoop;786			// Do we have this trait?787			CvLeaderHeadInfo* pkLeaderInfo = &m_pPlayer->getLeaderInfo();788			if(pkLeaderInfo)789			{790				if(!pkLeaderInfo->hasTrait(iTraitLoop))  // This trait check disregards tech prereqs and obsoletes791					continue;792793				CvTraitEntry* pkTraitInfo = GC.getTraitInfo(eTraitLoop);794				if(pkTraitInfo)795				{796					// Maya Calendar trait - We want to heavily weight the unlock tech797					if(pkTraitInfo->IsMayaCalendarBonuses())798					{799						int iPrereqTech = pkTraitInfo->GetPrereqTech();800						if(iPrereqTech != NO_TECH)801						{802							m_piCivTechPriority[iPrereqTech] *= GC.getTECH_PRIORITY_MAYA_CALENDAR_BONUS();803						}804					}805806					// Other traits that unlock by tech?807				}808			}809		}810	}811812	// Reset AI too813	m_pTechAI->Reset();814}

Calls

Called by