CvPlayerPolicies::GetDominantPolicyBranchForTitle() const
- Defined in
- CvPolicyClasses.cpp, line 4410
- Class
- CvPlayerPolicies
- Hook name
CivHooks::CvPlayerPolicies_GetDominantPolicyBranchForTitle
Hooks
static bool BeforeCvPlayerPolicies_GetDominantPolicyBranchForTitle(const CvPlayerPolicies* self, PolicyBranchTypes& result);static void AfterCvPlayerPolicies_GetDominantPolicyBranchForTitle(const CvPlayerPolicies* self, PolicyBranchTypes& result);static PolicyBranchTypes ReplaceCvPlayerPolicies_GetDominantPolicyBranchForTitle(PolicyBranchTypes (*original)(const CvPlayerPolicies*), const CvPlayerPolicies* self);CivRegisterBefore<CivHooks::CvPlayerPolicies_GetDominantPolicyBranchForTitle>(host, &BeforeCvPlayerPolicies_GetDominantPolicyBranchForTitle);CivRegisterAfter<CivHooks::CvPlayerPolicies_GetDominantPolicyBranchForTitle>(host, &AfterCvPlayerPolicies_GetDominantPolicyBranchForTitle);CivRegisterReplace<CivHooks::CvPlayerPolicies_GetDominantPolicyBranchForTitle>(host, &ReplaceCvPlayerPolicies_GetDominantPolicyBranchForTitle);
Code
4409/// Everything we picked recently the same?4410PolicyBranchTypes CvPlayerPolicies::GetDominantPolicyBranchForTitle() const4411{4412 // Everything we've picked recently matches4413 if(GetBranchPicked1() == GetBranchPicked2() &&4414 GetBranchPicked1() == GetBranchPicked3() &&4415 GetBranchPicked2() == GetBranchPicked3())4416 {4417 return GetBranchPicked1();4418 }44194420 // Haven't picked stuff from a branch three times in a row, so we have to see which branch we have the most of44214422 PolicyBranchTypes eTempBranch;44234424 std::vector<int> viPolicyBranchCounts;44254426 // Init vector4427 int iBranchLoop;4428 for(iBranchLoop = 0; iBranchLoop < m_pPolicies->GetNumPolicyBranches(); iBranchLoop++)4429 {4430 viPolicyBranchCounts.push_back(0);4431 }44324433 // Get count of each branch4434 for(int iPolicyLoop = 0; iPolicyLoop < GC.getNumPolicyInfos(); iPolicyLoop++)4435 {4436 const PolicyTypes eLoopPolicy = static_cast<PolicyTypes>(iPolicyLoop);4437 CvPolicyEntry* pkPolicyInfo = GC.getPolicyInfo(eLoopPolicy);4438 if(pkPolicyInfo)4439 {4440 if(HasPolicy(eLoopPolicy))4441 {4442 eTempBranch = (PolicyBranchTypes) pkPolicyInfo->GetPolicyBranchType();44434444 // Are we a free branch policy?4445 if(eTempBranch == NO_POLICY_BRANCH_TYPE)4446 {4447 for(iBranchLoop = 0; iBranchLoop < m_pPolicies->GetNumPolicyBranches(); iBranchLoop++)4448 {4449 const PolicyBranchTypes eLoopBranch = static_cast<PolicyBranchTypes>(iBranchLoop);4450 CvPolicyBranchEntry* pkPolicyBranchInfo = GC.getPolicyBranchInfo(eLoopBranch);4451 if(pkPolicyBranchInfo)4452 {4453 // Yes, it's a freebie4454 if(pkPolicyBranchInfo->GetFreePolicy() == eLoopPolicy)4455 {4456 eTempBranch = eLoopBranch;4457 break;4458 }4459 }4460 }4461 }44624463 if(eTempBranch != NO_POLICY_BRANCH_TYPE)4464 {4465 viPolicyBranchCounts[eTempBranch]++;4466 }4467 }4468 }4469 }44704471 // Now that we have our vector, see which has the most4472 PolicyBranchTypes eBestBranch = NO_POLICY_BRANCH_TYPE;4473 int iBestValue = 0;44744475 for(iBranchLoop = 0; iBranchLoop < m_pPolicies->GetNumPolicyBranches(); iBranchLoop++)4476 {4477 if(viPolicyBranchCounts[iBranchLoop] > iBestValue)4478 {4479 eBestBranch = (PolicyBranchTypes) iBranchLoop;4480 iBestValue = viPolicyBranchCounts[iBranchLoop];4481 }4482 }44834484 return eBestBranch;4485}
Calls
- CvGlobals::getNumPolicyInfos()
- CvGlobals::getPolicyBranchInfo(PolicyBranchTypes)
- CvGlobals::getPolicyInfo(PolicyTypes)
- CvPlayerPolicies::GetBranchPicked1() const
- CvPlayerPolicies::GetBranchPicked2() const
- CvPlayerPolicies::GetBranchPicked3() const
- CvPlayerPolicies::HasPolicy(PolicyTypes) const
- CvPolicyBranchEntry::GetFreePolicy() const
- CvPolicyEntry::GetPolicyBranchType() const
- CvPolicyXMLEntries::GetNumPolicyBranches()
std::vector::operator[]std::vector::push_backstd::vector::vector