Bazaar developer reference

CvPolicyAI::DoConsiderIdeologySwitch(CvPlayer *)

Defined in
CvPolicyAI.cpp, line 600
Class
CvPolicyAI
Hook name
CivHooks::CvPolicyAI_DoConsiderIdeologySwitch

Hooks

static bool BeforeCvPolicyAI_DoConsiderIdeologySwitch(CvPolicyAI* self, CvPlayer* pPlayer);static void AfterCvPolicyAI_DoConsiderIdeologySwitch(CvPolicyAI* self, CvPlayer* pPlayer);static void ReplaceCvPolicyAI_DoConsiderIdeologySwitch(void (*original)(CvPolicyAI*, CvPlayer*), CvPolicyAI* self, CvPlayer* pPlayer);CivRegisterBefore<CivHooks::CvPolicyAI_DoConsiderIdeologySwitch>(host, &BeforeCvPolicyAI_DoConsiderIdeologySwitch);CivRegisterAfter<CivHooks::CvPolicyAI_DoConsiderIdeologySwitch>(host, &AfterCvPolicyAI_DoConsiderIdeologySwitch);CivRegisterReplace<CivHooks::CvPolicyAI_DoConsiderIdeologySwitch>(host, &ReplaceCvPolicyAI_DoConsiderIdeologySwitch);

Code

599/// Should the AI look at switching ideology branches?600void CvPolicyAI::DoConsiderIdeologySwitch(CvPlayer* pPlayer)601{602	// Gather basic Ideology info603	int iCurrentHappiness = pPlayer->GetExcessHappiness();604	int iPublicOpinionUnhappiness = pPlayer->GetCulture()->GetPublicOpinionUnhappiness();605	PolicyBranchTypes ePreferredIdeology = pPlayer->GetCulture()->GetPublicOpinionPreferredIdeology();606	PolicyBranchTypes eCurrentIdeology = pPlayer->GetPlayerPolicies()->GetLateGamePolicyTree();607#if !defined(NO_ACHIEVEMENTS)608	PlayerTypes eMostPressure = pPlayer->GetCulture()->GetPublicOpinionBiggestInfluence();609#endif610	611	// Possible enough that we need to look at this in detail?612	if (iCurrentHappiness <= GC.getSUPER_UNHAPPY_THRESHOLD() && iPublicOpinionUnhappiness >= 10)613	{614		// How much Happiness could we gain from a switch?615		int iHappinessCurrentIdeology = GetBranchBuildingHappiness(pPlayer, eCurrentIdeology);616		int iHappinessPreferredIdeology = GetBranchBuildingHappiness(pPlayer, ePreferredIdeology);617618		// Does the switch fight against our clearly preferred victory path?619		bool bDontSwitchFreedom = false;620		bool bDontSwitchOrder = false;621		bool bDontSwitchAutocracy = false;622		int iConquestPriority = pPlayer->GetGrandStrategyAI()->GetConquestPriority();623		int iDiploPriority = pPlayer->GetGrandStrategyAI()->GetUnitedNationsPriority();624		int iTechPriority = pPlayer->GetGrandStrategyAI()->GetSpaceshipPriority();625		int iCulturePriority = pPlayer->GetGrandStrategyAI()->GetCulturePriority();626		int iClearPrefPercent = GC.getIDEOLOGY_PERCENT_CLEAR_VICTORY_PREF();627		if (iConquestPriority > (iDiploPriority   * (100 + iClearPrefPercent) / 100) &&628			iConquestPriority > (iTechPriority    * (100 + iClearPrefPercent) / 100) &&629			iConquestPriority > (iCulturePriority * (100 + iClearPrefPercent) / 100))630		{631			bDontSwitchFreedom = true;632		}633		else if (iDiploPriority > (iConquestPriority * (100 + iClearPrefPercent) / 100) &&634			iDiploPriority > (iTechPriority     * (100 + iClearPrefPercent) / 100) &&635			iDiploPriority > (iCulturePriority  * (100 + iClearPrefPercent) / 100))636		{637			bDontSwitchOrder = true;638		}639		else if (iTechPriority > (iConquestPriority * (100 + iClearPrefPercent) / 100) &&640			iTechPriority > (iDiploPriority    * (100 + iClearPrefPercent) / 100) &&641			iTechPriority > (iCulturePriority  * (100 + iClearPrefPercent) / 100))642		{643			bDontSwitchAutocracy = true;644		}645646		int iTotalHappinessImprovement = iPublicOpinionUnhappiness + iHappinessPreferredIdeology - iHappinessCurrentIdeology;647		if (iTotalHappinessImprovement >= 10)648		{649			if (bDontSwitchFreedom && ePreferredIdeology == GC.getPOLICY_BRANCH_FREEDOM())650			{651				return;652			}653			if (bDontSwitchAutocracy && ePreferredIdeology == GC.getPOLICY_BRANCH_AUTOCRACY())654			{655				return;656			}657			if (bDontSwitchOrder && ePreferredIdeology == GC.getPOLICY_BRANCH_ORDER())658			{659				return;660			}661662			// Cleared all obstacles -- REVOLUTION!663			pPlayer->SetAnarchyNumTurns(GC.getSWITCH_POLICY_BRANCHES_ANARCHY_TURNS());664			pPlayer->GetPlayerPolicies()->DoSwitchIdeologies(ePreferredIdeology);	665666#if !defined(NO_ACHIEVEMENTS)667			if (ePreferredIdeology == GC.getPOLICY_BRANCH_FREEDOM() && eCurrentIdeology == GC.getPOLICY_BRANCH_ORDER())668			{669				if (GET_PLAYER(eMostPressure).GetID() == GC.getGame().getActivePlayer())670				{671					gDLL->UnlockAchievement(ACHIEVEMENT_XP2_39);672				}673			}674#endif675		}676	}677}

Calls

Called by