CvPolicyAI::GetBranchBuildingHappiness(CvPlayer *, PolicyBranchTypes)
- Defined in
- CvPolicyAI.cpp, line 680
- Class
- CvPolicyAI
- Hook name
CivHooks::CvPolicyAI_GetBranchBuildingHappiness
Hooks
static bool BeforeCvPolicyAI_GetBranchBuildingHappiness(CvPolicyAI* self, CvPlayer* pPlayer, PolicyBranchTypes eBranch, int& result);static void AfterCvPolicyAI_GetBranchBuildingHappiness(CvPolicyAI* self, CvPlayer* pPlayer, PolicyBranchTypes eBranch, int& result);static int ReplaceCvPolicyAI_GetBranchBuildingHappiness(int (*original)(CvPolicyAI*, CvPlayer*, PolicyBranchTypes), CvPolicyAI* self, CvPlayer* pPlayer, PolicyBranchTypes eBranch);CivRegisterBefore<CivHooks::CvPolicyAI_GetBranchBuildingHappiness>(host, &BeforeCvPolicyAI_GetBranchBuildingHappiness);CivRegisterAfter<CivHooks::CvPolicyAI_GetBranchBuildingHappiness>(host, &AfterCvPolicyAI_GetBranchBuildingHappiness);CivRegisterReplace<CivHooks::CvPolicyAI_GetBranchBuildingHappiness>(host, &ReplaceCvPolicyAI_GetBranchBuildingHappiness);
Code
679/// What's the total Happiness benefit we could get from all policies/tenets in the branch based on our current buildings?680int CvPolicyAI::GetBranchBuildingHappiness(CvPlayer* pPlayer, PolicyBranchTypes eBranch)681{682 // Policy Building Mods683 int iSpecialPolicyBuildingHappiness = 0;684 int iBuildingClassLoop;685 BuildingClassTypes eBuildingClass;686 for(int iPolicyLoop = 0; iPolicyLoop < GC.getNumPolicyInfos(); iPolicyLoop++)687 {688 PolicyTypes ePolicy = (PolicyTypes)iPolicyLoop;689 CvPolicyEntry* pkPolicyInfo = GC.getPolicyInfo(ePolicy);690 if(pkPolicyInfo)691 {692 if (pkPolicyInfo->GetPolicyBranchType() == eBranch)693 {694 for(iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)695 {696 eBuildingClass = (BuildingClassTypes) iBuildingClassLoop;697698 CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);699 if (!pkBuildingClassInfo)700 {701 continue;702 }703704 if (pkPolicyInfo->GetBuildingClassHappiness(eBuildingClass) != 0)705 {706 BuildingTypes eBuilding = (BuildingTypes)pPlayer->getCivilizationInfo().getCivilizationBuildings(eBuildingClass);707 if (eBuilding != NO_BUILDING)708 {709 CvCity *pCity;710 int iLoop;711 for (pCity = pPlayer->firstCity(&iLoop); pCity != NULL; pCity = pPlayer->nextCity(&iLoop))712 {713 if (pCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)714 {715 iSpecialPolicyBuildingHappiness += pkPolicyInfo->GetBuildingClassHappiness(eBuildingClass);716 }717 }718 }719 }720 }721 }722 }723 }724 return iSpecialPolicyBuildingHappiness;725}
Calls
- CvCity::GetCityBuildings() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGlobals::getBuildingClassInfo(BuildingClassTypes)
- CvGlobals::getNumBuildingClassInfos()
- CvGlobals::getNumPolicyInfos()
- CvGlobals::getPolicyInfo(PolicyTypes)
- CvPlayer::firstCity(int *, bool)
- CvPlayer::getCivilizationInfo() const
- CvPlayer::nextCity(int *, bool)
- CvPolicyEntry::GetBuildingClassHappiness(int) const
- CvPolicyEntry::GetPolicyBranchType() const