diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 1b6ff11d8e..030257228a 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -712,6 +712,12 @@ AchievementManager::GetAchievementProgress(AchievementId achievement_id, u32* va return ResponseType::SUCCESS; } +const std::unordered_map& +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(); diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 2e2e3e938d..d12abf2167 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -54,6 +54,7 @@ public: using AchievementId = u32; static constexpr size_t FORMAT_SIZE = 24; using FormattedValue = std::array; + using LeaderboardRank = u32; static constexpr size_t RP_SIZE = 256; using RichPresence = std::array; using Badge = std::vector; @@ -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 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& GetLeaderboardsInfo() const; RichPresence GetRichPresence(); void CloseGame(); @@ -165,6 +182,7 @@ private: time_t m_last_ping_time = 0; std::unordered_map m_unlock_map; + std::unordered_map m_leaderboard_map; Common::WorkQueueThread> m_queue; Common::WorkQueueThread> m_image_queue;