CvCity::GetLocalHappiness() const
- Defined in
- CvCity.cpp, line 9729
- Class
- CvCity
- Hook name
CivHooks::CvCity_GetLocalHappiness
Hooks
static bool BeforeCvCity_GetLocalHappiness(const CvCity* self, int& result);static void AfterCvCity_GetLocalHappiness(const CvCity* self, int& result);static int ReplaceCvCity_GetLocalHappiness(int (*original)(const CvCity*), const CvCity* self);CivRegisterBefore<CivHooks::CvCity_GetLocalHappiness>(host, &BeforeCvCity_GetLocalHappiness);CivRegisterAfter<CivHooks::CvCity_GetLocalHappiness>(host, &AfterCvCity_GetLocalHappiness);CivRegisterReplace<CivHooks::CvCity_GetLocalHappiness>(host, &ReplaceCvCity_GetLocalHappiness);
Code
9729int CvCity::GetLocalHappiness() const9730{9731 CvPlayer& kPlayer = GET_PLAYER(m_eOwner);97329733 int iLocalHappiness = GetBaseHappinessFromBuildings();97349735 int iHappinessPerGarrison = kPlayer.GetHappinessPerGarrisonedUnit();9736 if(iHappinessPerGarrison > 0)9737 {9738 if(GetGarrisonedUnit() != NULL)9739 {9740 iLocalHappiness++;9741 }9742 }97439744 // Follower beliefs9745 int iHappinessFromReligion = 0;9746 CvGameReligions* pReligions = GC.getGame().GetGameReligions();97479748 ReligionTypes eMajority = GetCityReligions()->GetReligiousMajority();9749 if(eMajority != NO_RELIGION)9750 {9751 BeliefTypes eSecondaryPantheon = GetCityReligions()->GetSecondaryReligionPantheonBelief();9752 int iFollowers = GetCityReligions()->GetNumFollowers(eMajority);97539754 const CvReligion* pReligion = pReligions->GetReligion(eMajority, kPlayer.GetID());9755 if(pReligion)9756 {9757 iHappinessFromReligion += pReligion->m_Beliefs.GetHappinessPerCity(getPopulation());9758 if (eSecondaryPantheon != NO_BELIEF && getPopulation() >= GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetMinPopulation())9759 {9760 iHappinessFromReligion += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetHappinessPerCity();9761 }9762 if(plot()->isRiver())9763 {9764 iHappinessFromReligion += pReligion->m_Beliefs.GetRiverHappiness();9765 if (eSecondaryPantheon != NO_BELIEF)9766 {9767 iHappinessFromReligion += GC.GetGameBeliefs()->GetEntry(eSecondaryPantheon)->GetRiverHappiness();9768 }9769 }97709771 // Buildings9772 for(int jJ = 0; jJ < GC.getNumBuildingClassInfos(); jJ++)9773 {9774 BuildingClassTypes eBuildingClass = (BuildingClassTypes)jJ;97759776 CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);9777 if(!pkBuildingClassInfo)9778 {9779 continue;9780 }97819782 CvCivilizationInfo& playerCivilizationInfo = kPlayer.getCivilizationInfo();9783 BuildingTypes eBuilding = (BuildingTypes)playerCivilizationInfo.getCivilizationBuildings(eBuildingClass);97849785 if(eBuilding != NO_BUILDING)9786 {9787 if(GetCityBuildings()->GetNumBuilding(eBuilding) > 0)9788 {9789#if defined(MOD_BUGFIX_MINOR)9790 iHappinessFromReligion += pReligion->m_Beliefs.GetBuildingClassHappiness(eBuildingClass, iFollowers) * GetCityBuildings()->GetNumBuilding(eBuilding);9791#else9792 iHappinessFromReligion += pReligion->m_Beliefs.GetBuildingClassHappiness(eBuildingClass, iFollowers);9793#endif9794 }9795 }9796 }9797 }9798 iLocalHappiness += iHappinessFromReligion;9799 }98009801 // Policy Building Mods9802 int iSpecialPolicyBuildingHappiness = 0;9803 int iBuildingClassLoop;9804 BuildingClassTypes eBuildingClass;9805 for(int iPolicyLoop = 0; iPolicyLoop < GC.getNumPolicyInfos(); iPolicyLoop++)9806 {9807 PolicyTypes ePolicy = (PolicyTypes)iPolicyLoop;9808 CvPolicyEntry* pkPolicyInfo = GC.getPolicyInfo(ePolicy);9809 if(pkPolicyInfo)9810 {9811 if(kPlayer.GetPlayerPolicies()->HasPolicy(ePolicy) && !kPlayer.GetPlayerPolicies()->IsPolicyBlocked(ePolicy))9812 {9813 for(iBuildingClassLoop = 0; iBuildingClassLoop < GC.getNumBuildingClassInfos(); iBuildingClassLoop++)9814 {9815 eBuildingClass = (BuildingClassTypes) iBuildingClassLoop;98169817 CvBuildingClassInfo* pkBuildingClassInfo = GC.getBuildingClassInfo(eBuildingClass);9818 if(!pkBuildingClassInfo)9819 {9820 continue;9821 }98229823 BuildingTypes eBuilding = (BuildingTypes)kPlayer.getCivilizationInfo().getCivilizationBuildings(eBuildingClass);9824 if(eBuilding != NO_BUILDING && GetCityBuildings()->GetNumBuilding(eBuilding) > 0) // slewis - added the NO_BUILDING check for the ConquestDLX scenario which has civ specific wonders9825 {9826 if(pkPolicyInfo->GetBuildingClassHappiness(eBuildingClass) != 0)9827 {9828#if defined(MOD_BUGFIX_MINOR)9829 iSpecialPolicyBuildingHappiness += pkPolicyInfo->GetBuildingClassHappiness(eBuildingClass) * GetCityBuildings()->GetNumBuilding(eBuilding);9830#else9831 iSpecialPolicyBuildingHappiness += pkPolicyInfo->GetBuildingClassHappiness(eBuildingClass);9832#endif9833 }9834 }9835 }9836 }9837 }9838 }98399840 iLocalHappiness += iSpecialPolicyBuildingHappiness;9841 int iLocalHappinessCap = getPopulation();98429843 // India has unique way to compute local happiness cap9844 if(kPlayer.GetPlayerTraits()->GetCityUnhappinessModifier() != 0)9845 {9846 // 0.67 per population, rounded up9847 iLocalHappinessCap = (iLocalHappinessCap * 20) + 15;9848 iLocalHappinessCap /= 30;9849 }98509851 if(iLocalHappinessCap < iLocalHappiness)9852 {9853 return iLocalHappinessCap;9854 }9855 else9856 {9857 return iLocalHappiness;9858 }9859}
Calls
- CvBeliefEntry::GetHappinessPerCity() const
- CvBeliefEntry::GetMinPopulation() const
- CvBeliefEntry::GetRiverHappiness() const
- CvBeliefXMLEntries::GetEntry(int)
- CvCity::GetBaseHappinessFromBuildings() const
- CvCity::GetCityBuildings() const
- CvCity::GetCityReligions() const
- CvCity::GetGarrisonedUnit() const
- CvCity::getPopulation(bool) const
- CvCity::plot() const
- CvCityBuildings::GetNumBuilding(BuildingTypes) const
- CvCityReligions::GetNumFollowers(ReligionTypes)
- CvCityReligions::GetReligiousMajority()
- CvCityReligions::GetSecondaryReligionPantheonBelief()
- CvCivilizationInfo::getCivilizationBuildings(int) const
- CvGame::GetGameReligions()
- CvGameReligions::GetReligion(ReligionTypes, PlayerTypes) const
- CvGlobals::getBuildingClassInfo(BuildingClassTypes)
- CvGlobals::getGame()
- CvGlobals::GetGameBeliefs() const
- CvGlobals::getNumBuildingClassInfos()
- CvGlobals::getNumPolicyInfos()
- CvGlobals::getPolicyInfo(PolicyTypes)
- CvPlayer::getCivilizationInfo() const
- CvPlayer::GetHappinessPerGarrisonedUnit() const
- CvPlayer::GetID() const
- CvPlayer::GetPlayerPolicies() const
- CvPlayer::GetPlayerTraits() const
- CvPlayerAI::getPlayer(PlayerTypes)
- CvPlayerPolicies::HasPolicy(PolicyTypes) const
- CvPlayerPolicies::IsPolicyBlocked(PolicyTypes) const
- CvPlayerTraits::GetCityUnhappinessModifier() const
- CvPlot::isRiver() const
- CvPolicyEntry::GetBuildingClassHappiness(int) const
- CvReligionBeliefs::GetBuildingClassHappiness(BuildingClassTypes, int) const
- CvReligionBeliefs::GetHappinessPerCity(int) const
- CvReligionBeliefs::GetRiverHappiness() const
FAutoVariable::operator const PlayerTypes &