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
- CvBuildInfo::getImprovement() const
- CvBuildInfo::getTechPrereq() const
- CvBuildingEntry::GetPrereqAndTech() const
- CvBuildingXMLEntries::GetEntry(int)
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvCivilizationInfo::getCivilizationUnits(int) const
- CvCivilizationInfo::isCivilizationBuildingOverridden(int) const
- CvCivilizationInfo::isCivilizationUnitOverridden(int) const
- CvGlobals::getBuildInfo(BuildTypes)
- CvGlobals::getCivilizationInfo(CivilizationTypes)
- CvGlobals::GetGameBuildings() const
- CvGlobals::getImprovementInfo(ImprovementTypes)
- CvGlobals::getNumBuildInfos()
- CvGlobals::getNumBuildingClassInfos()
- CvGlobals::getNumImprovementInfos()
- CvGlobals::getNumTraitInfos()
- CvGlobals::getNumUnitClassInfos()
- CvGlobals::getTECH_PRIORITY_MAYA_CALENDAR_BONUS()
- CvGlobals::getTECH_PRIORITY_UNIQUE_ITEM()
- CvGlobals::getTraitInfo(TraitTypes)
- CvGlobals::getUnitInfo(UnitTypes)
- CvImprovementEntry::GetRequiredCivilization() const
- CvImprovementEntry::IsSpecificCivRequired() const
- CvLeaderHeadInfo::hasTrait(int) const
- CvPlayer::getCivilizationType() const
- CvPlayer::getLeaderInfo() const
- CvPlayer::isBarbarian() const
- CvPlayer::isMinorCiv() const
- CvTechAI::Reset()
- CvTechXMLEntries::GetNumTechs()
- CvTraitEntry::GetPrereqTech() const
- CvTraitEntry::IsMayaCalendarBonuses() const
- CvUnitEntry::GetPrereqAndTech() const