Added Leaderboard info map to AchievementManager

The leaderboard map created here contains information useful to displaying leaderboard stats in the Achievement dialog, including each leaderboard's name and description and a partial list of entries for display. The entire map is exposed to the UI in a single call for simplicity.
This commit is contained in:
LillyJadeKatrin 2023-06-17 10:56:11 -04:00 committed by Admiral H. Curtiss
parent daf9ff012a
commit 61dded7043
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
2 changed files with 25 additions and 0 deletions

View File

@ -712,6 +712,12 @@ AchievementManager::GetAchievementProgress(AchievementId achievement_id, u32* va
return ResponseType::SUCCESS;
}
const std::unordered_map<AchievementId, AchievementManager::LeaderboardStatus>&
AchievementManager::GetLeaderboardsInfo() const
{
return m_leaderboard_map;
}
AchievementManager::RichPresence AchievementManager::GetRichPresence()
{
std::lock_guard lg{m_lock};
@ -732,6 +738,7 @@ void AchievementManager::CloseGame()
m_game_id = 0;
m_game_badge.name = "";
m_unlock_map.clear();
m_leaderboard_map.clear();
rc_api_destroy_fetch_game_data_response(&m_game_data);
std::memset(&m_game_data, 0, sizeof(m_game_data));
m_queue.Cancel();

View File

@ -54,6 +54,7 @@ public:
using AchievementId = u32;
static constexpr size_t FORMAT_SIZE = 24;
using FormattedValue = std::array<char, FORMAT_SIZE>;
using LeaderboardRank = u32;
static constexpr size_t RP_SIZE = 256;
using RichPresence = std::array<char, RP_SIZE>;
using Badge = std::vector<u8>;
@ -83,6 +84,21 @@ public:
static constexpr std::string_view GOLD = "#FFD700";
static constexpr std::string_view BLUE = "#0B71C1";
struct LeaderboardEntry
{
std::string username;
FormattedValue score;
LeaderboardRank rank;
};
struct LeaderboardStatus
{
std::string name;
std::string description;
u32 player_index = 0;
std::unordered_map<u32, LeaderboardEntry> entries;
};
static AchievementManager* GetInstance();
void Init();
void SetUpdateCallback(UpdateCallback callback);
@ -113,6 +129,7 @@ public:
const UnlockStatus& GetUnlockStatus(AchievementId achievement_id) const;
AchievementManager::ResponseType GetAchievementProgress(AchievementId achievement_id, u32* value,
u32* target);
const std::unordered_map<AchievementId, LeaderboardStatus>& GetLeaderboardsInfo() const;
RichPresence GetRichPresence();
void CloseGame();
@ -165,6 +182,7 @@ private:
time_t m_last_ping_time = 0;
std::unordered_map<AchievementId, UnlockStatus> m_unlock_map;
std::unordered_map<AchievementId, LeaderboardStatus> m_leaderboard_map;
Common::WorkQueueThread<std::function<void()>> m_queue;
Common::WorkQueueThread<std::function<void()>> m_image_queue;