Bazaar developer reference

CvLeague::GetResolutionVoteOpinionDetails(ResolutionTypes, PlayerTypes, int)

Defined in
CvVotingClasses.cpp, line 4249
Class
CvLeague
Hook name
CivHooks::CvLeague_GetResolutionVoteOpinionDetails

Hooks

static bool BeforeCvLeague_GetResolutionVoteOpinionDetails(CvLeague* self, ResolutionTypes eResolution, PlayerTypes eObserver, int iResolutionID, CvString& result);static void AfterCvLeague_GetResolutionVoteOpinionDetails(CvLeague* self, ResolutionTypes eResolution, PlayerTypes eObserver, int iResolutionID, CvString& result);static CvString ReplaceCvLeague_GetResolutionVoteOpinionDetails(CvString (*original)(CvLeague*, ResolutionTypes, PlayerTypes, int), CvLeague* self, ResolutionTypes eResolution, PlayerTypes eObserver, int iResolutionID);CivRegisterBefore<CivHooks::CvLeague_GetResolutionVoteOpinionDetails>(host, &BeforeCvLeague_GetResolutionVoteOpinionDetails);CivRegisterAfter<CivHooks::CvLeague_GetResolutionVoteOpinionDetails>(host, &AfterCvLeague_GetResolutionVoteOpinionDetails);CivRegisterReplace<CivHooks::CvLeague_GetResolutionVoteOpinionDetails>(host, &ReplaceCvLeague_GetResolutionVoteOpinionDetails);

Code

4249CvString CvLeague::GetResolutionVoteOpinionDetails(ResolutionTypes eResolution, PlayerTypes eObserver, int iResolutionID)4250{4251	CvResolutionEntry* pInfo = GC.getResolutionInfo(eResolution);4252	if (!pInfo)4253	{4254		return "";4255	}4256	// Must be proposed as either enact or repeal, but not both4257	if (!IsProposed(iResolutionID, /*bRepeal*/false) && !IsProposed(iResolutionID, /*bRepeal*/true))4258	{4259		CvAssert(false);4260		return "";4261	}4262	if (IsProposed(iResolutionID, /*bRepeal*/false) && IsProposed(iResolutionID, /*bRepeal*/true))4263	{4264		CvAssert(false);4265		return "";4266	}4267	4268	CvString s = "";4269	s += Localization::Lookup("TXT_KEY_LEAGUE_OVERVIEW_VOTE_OPINIONS").toUTF8();42704271	bool bEnact = IsProposed(iResolutionID, /*bRepeal*/false);4272	ResolutionDecisionTypes eDecision = pInfo->GetVoterDecision();4273	if (!bEnact)4274	{4275		eDecision = RESOLUTION_DECISION_REPEAL;4276	}4277	std::vector<int> vChoices = GetChoicesForDecision(eDecision, NO_PLAYER);42784279	// Discover what choices we can of the other players4280	FStaticVector< std::pair<PlayerTypes, int>, MAX_MAJOR_CIVS, true, c_eCiv5GameplayDLL> vMemberOpinions;4281	for (MemberList::iterator it = m_vMembers.begin(); it != m_vMembers.end(); ++it)4282	{4283		if (it->ePlayer != eObserver && CanEverVote(it->ePlayer))4284		{4285			int iMemberChoice = LeagueHelpers::CHOICE_NONE;4286			if (bEnact)4287			{4288				iMemberChoice = GET_PLAYER(it->ePlayer).GetLeagueAI()->EvaluateVoteForOtherPlayerKnowledge(this, eObserver, GetEnactProposal(iResolutionID));4289			}4290			else4291			{4292				iMemberChoice = GET_PLAYER(it->ePlayer).GetLeagueAI()->EvaluateVoteForOtherPlayerKnowledge(this, eObserver, GetRepealProposal(iResolutionID));4293			}4294			std::pair<PlayerTypes, int> pair = std::pair<PlayerTypes, int>(it->ePlayer, iMemberChoice);4295			vMemberOpinions.push_back(pair);4296		}4297	}42984299	std::vector<LeagueHelpers::VoteOpinionIntrigueElement> vChoiceCommitments;4300	std::vector<LeagueHelpers::VoteOpinionIntrigueElement> vChoiceLeanings;4301	for (uint iChoiceIndex = 0; iChoiceIndex < vChoices.size(); iChoiceIndex++)4302	{4303		int iChoice = vChoices[iChoiceIndex];4304		int iNumCivsCommitted = 0;4305		int iNumCivsLeaning = 0;4306		int iNumDelegatesCommitted = 0;4307		int iNumDelegatesLeaning = 0;43084309		for (uint iMemberIndex = 0; iMemberIndex < vMemberOpinions.size(); iMemberIndex++)4310		{4311			PlayerTypes eMember = vMemberOpinions[iMemberIndex].first;4312			int iMemberChoice = vMemberOpinions[iMemberIndex].second;4313			int iMemberDelegates = CalculateStartingVotesForMember(eMember);43144315			// Vote Commitment to us4316			int iCommitted = GET_PLAYER(eMember).GetLeagueAI()->GetVoteCommitment(eObserver, iResolutionID, iChoice, bEnact); //here4317			if (iCommitted > 0)4318			{4319				iNumCivsCommitted++;4320				iNumDelegatesCommitted += iCommitted;4321				iMemberDelegates -= iCommitted;4322				CvAssert(iMemberDelegates >= 0);4323			}43244325			// Known leaning4326			if (iMemberChoice == iChoice)4327			{4328				if (iMemberDelegates > 0)4329				{4330					iNumCivsLeaning++;4331					iNumDelegatesLeaning += iMemberDelegates;4332				}4333			}4334		}43354336		if (iNumCivsCommitted > 0)4337		{4338			LeagueHelpers::VoteOpinionIntrigueElement temp;4339			temp.iChoice = iChoice;4340			temp.iNumCivs = iNumCivsCommitted;4341			temp.iNumDelegates = iNumDelegatesCommitted;4342			vChoiceCommitments.push_back(temp);4343		}43444345		if (iNumCivsLeaning > 0)4346		{4347			LeagueHelpers::VoteOpinionIntrigueElement temp;4348			temp.iChoice = iChoice;4349			temp.iNumCivs = iNumCivsLeaning;4350			temp.iNumDelegates = iNumDelegatesLeaning;4351			vChoiceLeanings.push_back(temp);4352		}4353	}43544355	// Votes committed to us (show all of them - don't address if a player makes ones for different choices since that's weird)4356	if (!vChoiceCommitments.empty())4357	{4358		std::stable_sort(vChoiceCommitments.begin(), vChoiceCommitments.end(), LeagueHelpers::VoteOpinionIntrigueSorter());4359		for (uint i = 0; i < vChoiceCommitments.size(); i++)4360		{4361			Localization::String sTemp = Localization::Lookup("TXT_KEY_LEAGUE_OVERVIEW_VOTE_OPINIONS_COMMITMENTS");4362			sTemp << vChoiceCommitments[i].iNumDelegates << vChoiceCommitments[i].iNumCivs << LeagueHelpers::GetTextForChoice(eDecision, vChoiceCommitments[i].iChoice);4363			s += sTemp.toUTF8();4364		}4365	}43664367	// Known leanings (but only show the top ones, lest the tooltip get cut off)4368	int iNumLeaningsShown = 0;4369	int iNumLeaningsToShow = 11;4370	if (!vChoiceLeanings.empty())4371	{4372		std::stable_sort(vChoiceLeanings.begin(), vChoiceLeanings.end(), LeagueHelpers::VoteOpinionIntrigueSorter());4373		for (uint i = 0; i < vChoiceLeanings.size(); i++)4374		{4375			if (iNumLeaningsShown <= iNumLeaningsToShow)4376			{4377				iNumLeaningsShown++;4378				Localization::String sTemp = Localization::Lookup("TXT_KEY_LEAGUE_OVERVIEW_VOTE_OPINIONS_CHOICE");4379				sTemp << vChoiceLeanings[i].iNumDelegates << vChoiceLeanings[i].iNumCivs << LeagueHelpers::GetTextForChoice(eDecision, vChoiceLeanings[i].iChoice);4380				s += sTemp.toUTF8();4381			}4382			else4383			{4384				break;4385			}4386		}4387	}43884389	// Unknown leanings4390	int iNumCivsUnaccounted = 0;4391	int iNumDelegatesUnaccounted = 0;4392	for (uint iMemberIndex = 0; iMemberIndex < vMemberOpinions.size(); iMemberIndex++)4393	{4394		PlayerTypes eMember = vMemberOpinions[iMemberIndex].first;4395		int iMemberChoice = vMemberOpinions[iMemberIndex].second;4396		int iMemberDelegates = CalculateStartingVotesForMember(eMember);43974398		// Vote Commitment to us4399		for (uint i = 0; i < vChoices.size(); i++)4400		{4401			int iCommitted = GET_PLAYER(eMember).GetLeagueAI()->GetVoteCommitment(eObserver, iResolutionID, vChoices[i], bEnact);4402			if (iCommitted > 0)4403			{4404				iMemberDelegates -= iCommitted;4405				CvAssert(iMemberDelegates >= 0);4406			}4407		}44084409		// Unknown leaning4410		if (iMemberChoice == LeagueHelpers::CHOICE_NONE)4411		{4412			if (iMemberDelegates > 0)4413			{4414				iNumCivsUnaccounted++;4415				iNumDelegatesUnaccounted += iMemberDelegates;4416			}4417		}4418	}4419	if (iNumCivsUnaccounted > 0)4420	{4421		Localization::String sTemp = Localization::Lookup("TXT_KEY_LEAGUE_OVERVIEW_VOTE_OPINIONS_UNACCOUNTED");4422		sTemp << iNumDelegatesUnaccounted << iNumCivsUnaccounted;4423		s += sTemp.toUTF8();4424	}44254426	// Our delegation4427	int iOurDelegates = CalculateStartingVotesForMember(eObserver);4428	if (iOurDelegates > 0)4429	{4430		Localization::String sTemp = Localization::Lookup("TXT_KEY_LEAGUE_OVERVIEW_VOTE_OPINIONS_OURS");4431		sTemp << iOurDelegates;4432		s += sTemp.toUTF8();4433	}44344435	return s;4436}

Calls

Called by