AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ArenaSeasonRewardDistributor Class Reference

#include "ArenaSeasonRewardsDistributor.h"

Public Member Functions

 ArenaSeasonRewardDistributor (ArenaSeasonTeamRewarder *rewarder)
 
void DistributeRewards (ArenaTeamMgr::ArenaTeamContainer &arenaTeams, std::vector< ArenaSeasonRewardGroup > &rewardGroups)
 

Private Attributes

ArenaSeasonTeamRewarder_rewarder
 

Detailed Description

Constructor & Destructor Documentation

◆ ArenaSeasonRewardDistributor()

ArenaSeasonRewardDistributor::ArenaSeasonRewardDistributor ( ArenaSeasonTeamRewarder rewarder)
105 : _rewarder(rewarder)
106{
107}
ArenaSeasonTeamRewarder * _rewarder
Definition ArenaSeasonRewardsDistributor.h:51

Member Function Documentation

◆ DistributeRewards()

void ArenaSeasonRewardDistributor::DistributeRewards ( ArenaTeamMgr::ArenaTeamContainer arenaTeams,
std::vector< ArenaSeasonRewardGroup > &  rewardGroups 
)
110{
111 std::vector<ArenaTeam*> sortedTeams;
112 sortedTeams.reserve(arenaTeams.size());
113
114 static constexpr uint16 minRequiredGames = 30;
115
116 for (auto const& [id, team] : arenaTeams)
117 if (team->GetStats().SeasonGames >= minRequiredGames)
118 sortedTeams.push_back(team);
119
120 std::sort(sortedTeams.begin(), sortedTeams.end(), [](ArenaTeam* a, ArenaTeam* b) {
121 return a->GetRating() > b->GetRating();
122 });
123
124 std::vector<ArenaSeasonRewardGroup> pctRewardGroup;
125 std::vector<ArenaSeasonRewardGroup> absRewardGroup;
126
127 for (auto const& reward : rewardGroups)
128 {
129 if (reward.criteriaType == ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE)
130 pctRewardGroup.push_back(reward);
131 else
132 absRewardGroup.push_back(reward);
133 }
134
135 size_t totalTeams = sortedTeams.size();
136 for (auto const& rewardGroup : pctRewardGroup)
137 {
138 size_t minIndex = static_cast<size_t>(rewardGroup.minCriteria * totalTeams / 100);
139 size_t maxIndex = static_cast<size_t>(rewardGroup.maxCriteria * totalTeams / 100);
140
141 minIndex = std::min(minIndex, totalTeams);
142 maxIndex = std::min(maxIndex, totalTeams);
143
144 for (size_t i = minIndex; i < maxIndex; ++i)
145 {
146 ArenaTeam* team = sortedTeams[i];
147 _rewarder->RewardTeamWithRewardGroup(team, rewardGroup);
148 }
149 }
150
151 for (auto const& rewardGroup : absRewardGroup)
152 {
153 size_t minIndex = rewardGroup.minCriteria-1; // Top 1 team is the team with index 0, so we need make -1.
154 size_t maxIndex = rewardGroup.maxCriteria;
155
156 minIndex = std::max(minIndex, size_t(0));
157 minIndex = std::min(minIndex, totalTeams);
158 maxIndex = std::min(maxIndex, totalTeams);
159
160 for (size_t i = minIndex; i < maxIndex; ++i)
161 {
162 ArenaTeam* team = sortedTeams[i];
163 _rewarder->RewardTeamWithRewardGroup(team, rewardGroup);
164 }
165 }
166}
@ ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE
Definition ArenaSeasonMgr.h:40
std::uint16_t uint16
Definition Define.h:108
virtual void RewardTeamWithRewardGroup(ArenaTeam *arenaTeam, ArenaSeasonRewardGroup const &rewardGroup)=0
Definition ArenaTeam.h:137

References _rewarder, ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE, and ArenaSeasonTeamRewarder::RewardTeamWithRewardGroup().

Referenced by ArenaSeasonMgr::RewardTeamsForTheSeason().

Member Data Documentation

◆ _rewarder

ArenaSeasonTeamRewarder* ArenaSeasonRewardDistributor::_rewarder
private

Referenced by DistributeRewards().


The documentation for this class was generated from the following files: