CvCityBuildings::SetBuildingYieldChange(BuildingClassTypes, YieldTypes, int)
- Defined in
- CvBuildingClasses.cpp, line 2995
- Class
- CvCityBuildings
- Hook name
CivHooks::CvCityBuildings_SetBuildingYieldChange
Hooks
static bool BeforeCvCityBuildings_SetBuildingYieldChange(CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);static void AfterCvCityBuildings_SetBuildingYieldChange(CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);static void ReplaceCvCityBuildings_SetBuildingYieldChange(void (*original)(CvCityBuildings*, BuildingClassTypes, YieldTypes, int), CvCityBuildings* self, BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange);CivRegisterBefore<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &BeforeCvCityBuildings_SetBuildingYieldChange);CivRegisterAfter<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &AfterCvCityBuildings_SetBuildingYieldChange);CivRegisterReplace<CivHooks::CvCityBuildings_SetBuildingYieldChange>(host, &ReplaceCvCityBuildings_SetBuildingYieldChange);
Code
2994/// Accessor: Set yield boost for a specific building by yield type2995void CvCityBuildings::SetBuildingYieldChange(BuildingClassTypes eBuildingClass, YieldTypes eYield, int iChange)2996{2997 for(std::vector<BuildingYieldChange>::iterator it = m_aBuildingYieldChange.begin(); it != m_aBuildingYieldChange.end(); ++it)2998 {2999 if((*it).eBuildingClass == eBuildingClass && (*it).eYield == eYield)3000 {3001 int iOldChange = (*it).iChange;3002 if(iOldChange != iChange)3003 {30043005 if(iChange == 0)3006 {3007 m_aBuildingYieldChange.erase(it);3008 }3009 else3010 {3011 (*it).iChange = iChange;3012 }30133014 BuildingTypes eBuilding = (BuildingTypes)GC.getCivilizationInfo(m_pCity->getCivilizationType())->getCivilizationBuildings(eBuildingClass);3015 if(NO_BUILDING != eBuilding)3016 {3017 if(GetNumActiveBuilding(eBuilding) > 0)3018 {3019 m_pCity->ChangeBaseYieldRateFromBuildings(eYield, (iChange - iOldChange) * GetNumActiveBuilding(eBuilding));3020 }3021 }3022 }30233024 return;3025 }3026 }30273028 if(0 != iChange)3029 {3030 BuildingYieldChange kChange;3031 kChange.eBuildingClass = eBuildingClass;3032 kChange.eYield = eYield;3033 kChange.iChange = iChange;3034 m_aBuildingYieldChange.push_back(kChange);30353036 BuildingTypes eBuilding = (BuildingTypes)m_pCity->getCivilizationInfo().getCivilizationBuildings(eBuildingClass);3037 if(NO_BUILDING != eBuilding)3038 {3039 if(GetNumActiveBuilding(eBuilding) > 0)3040 {3041 m_pCity->ChangeBaseYieldRateFromBuildings(eYield, iChange * GetNumActiveBuilding(eBuilding));3042 }3043 }3044 }3045}
Calls
- BuildingYieldChange::BuildingYieldChange()
- CvCity::ChangeBaseYieldRateFromBuildings(YieldTypes, int)
- CvCity::getCivilizationInfo() const
- CvCity::getCivilizationType() const
- CvCityBuildings::GetNumActiveBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGlobals::getCivilizationInfo(CivilizationTypes)
std::_Vector_const_iterator::_Vector_const_iteratorstd::_Vector_const_iterator::operator!=std::_Vector_iterator::operator*std::_Vector_iterator::operator++std::vector::beginstd::vector::endstd::vector::erasestd::vector::push_back