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
- CvGlobals::getIDEOLOGY_PERCENT_CLEAR_VICTORY_PREF()
- CvGlobals::getPOLICY_BRANCH_AUTOCRACY()
- CvGlobals::getPOLICY_BRANCH_FREEDOM()
- CvGlobals::getPOLICY_BRANCH_ORDER()
- CvGlobals::getSUPER_UNHAPPY_THRESHOLD()
- CvGlobals::getSWITCH_POLICY_BRANCHES_ANARCHY_TURNS()
- CvGrandStrategyAI::GetConquestPriority()
- CvGrandStrategyAI::GetCulturePriority()
- CvGrandStrategyAI::GetSpaceshipPriority()
- CvGrandStrategyAI::GetUnitedNationsPriority()
- CvPlayer::GetCulture() const
- CvPlayer::GetExcessHappiness() const
- CvPlayer::GetGrandStrategyAI() const
- CvPlayer::GetPlayerPolicies() const
- CvPlayer::SetAnarchyNumTurns(int)
- CvPlayerCulture::GetPublicOpinionPreferredIdeology() const
- CvPlayerCulture::GetPublicOpinionUnhappiness() const
- CvPlayerPolicies::DoSwitchIdeologies(PolicyBranchTypes)
- CvPlayerPolicies::GetLateGamePolicyTree() const
- CvPolicyAI::GetBranchBuildingHappiness(CvPlayer *, PolicyBranchTypes)