Bazaar developer reference

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

Called by