From 64e3a64c87d6a7880be47d14bf97174f791a2d58 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Thu, 13 Apr 2023 23:34:46 -0400 Subject: [PATCH] Added ActivateDeactivateLeaderboards to AchievementManager This activates or deactivates leaderboards in the rcheevos runtime similarly to achievements. The logic is much more straightforward - all leaderboards are active together; there is nothing requiring some leaderboards to be active while others are unactive, and even a leaderboard that has been submitted to in this session is still active to be submitted to again. The only criteria are that leaderboards must be enabled in the settings, and hardcore mode must be on, the latter of which is false until a future PR. --- Source/Core/Core/AchievementManager.cpp | 19 +++++++++++++++++++ Source/Core/Core/AchievementManager.h | 1 + .../Core/Core/Config/AchievementSettings.cpp | 2 ++ Source/Core/Core/Config/AchievementSettings.h | 1 + 4 files changed, 23 insertions(+) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 11061073fe..1b44ab8a4e 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -141,6 +141,7 @@ void AchievementManager::LoadGameByFilenameAsync(const std::string& iso_path, LoadUnlockData([](ResponseType r_type) {}); ActivateDeactivateAchievements(); } + ActivateDeactivateLeaderboards(); callback(fetch_game_data_response); }); @@ -173,6 +174,23 @@ void AchievementManager::ActivateDeactivateAchievements() } } +void AchievementManager::ActivateDeactivateLeaderboards() +{ + bool leaderboards_enabled = Config::Get(Config::RA_LEADERBOARDS_ENABLED); + for (u32 ix = 0; ix < m_game_data.num_leaderboards; ix++) + { + auto leaderboard = m_game_data.leaderboards[ix]; + if (m_is_game_loaded && leaderboards_enabled && hardcore_mode_enabled) + { + rc_runtime_activate_lboard(&m_runtime, leaderboard.id, leaderboard.definition, nullptr, 0); + } + else + { + rc_runtime_deactivate_lboard(&m_runtime, m_game_data.leaderboards[ix].id); + } + } +} + void AchievementManager::CloseGame() { m_is_game_loaded = false; @@ -180,6 +198,7 @@ void AchievementManager::CloseGame() m_queue.Cancel(); m_unlock_map.clear(); ActivateDeactivateAchievements(); + ActivateDeactivateLeaderboards(); } void AchievementManager::Logout() diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 7eb6397e49..d2e37329f0 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -41,6 +41,7 @@ public: void LoadUnlockData(const ResponseCallback& callback); void ActivateDeactivateAchievements(); + void ActivateDeactivateLeaderboards(); void CloseGame(); void Logout(); void Shutdown(); diff --git a/Source/Core/Core/Config/AchievementSettings.cpp b/Source/Core/Core/Config/AchievementSettings.cpp index 92a761f6a6..6da342cbc4 100644 --- a/Source/Core/Core/Config/AchievementSettings.cpp +++ b/Source/Core/Core/Config/AchievementSettings.cpp @@ -15,6 +15,8 @@ const Info RA_USERNAME{{System::Achievements, "Achievements", "User const Info RA_API_TOKEN{{System::Achievements, "Achievements", "ApiToken"}, ""}; const Info RA_ACHIEVEMENTS_ENABLED{ {System::Achievements, "Achievements", "AchievementsEnabled"}, false}; +const Info RA_LEADERBOARDS_ENABLED{ + {System::Achievements, "Achievements", "LeaderboardsEnabled"}, false}; const Info RA_UNOFFICIAL_ENABLED{{System::Achievements, "Achievements", "UnofficialEnabled"}, false}; const Info RA_ENCORE_ENABLED{{System::Achievements, "Achievements", "EncoreEnabled"}, false}; diff --git a/Source/Core/Core/Config/AchievementSettings.h b/Source/Core/Core/Config/AchievementSettings.h index 13da23eafa..f49537ec39 100644 --- a/Source/Core/Core/Config/AchievementSettings.h +++ b/Source/Core/Core/Config/AchievementSettings.h @@ -12,6 +12,7 @@ extern const Info RA_ENABLED; extern const Info RA_USERNAME; extern const Info RA_API_TOKEN; extern const Info RA_ACHIEVEMENTS_ENABLED; +extern const Info RA_LEADERBOARDS_ENABLED; extern const Info RA_UNOFFICIAL_ENABLED; extern const Info RA_ENCORE_ENABLED; } // namespace Config