diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 54671a1388..6fab056c79 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -633,6 +633,18 @@ std::recursive_mutex* AchievementManager::GetLock() return &m_lock; } +bool AchievementManager::IsHardcoreModeActive() const +{ + std::lock_guard lg{m_lock}; + if (!Config::Get(Config::RA_HARDCORE_ENABLED)) + return false; + if (!Core::IsRunning()) + return true; + if (!IsGameLoaded()) + return false; + return (m_runtime.trigger_count + m_runtime.lboard_count > 0); +} + std::string AchievementManager::GetPlayerDisplayName() const { return IsLoggedIn() ? m_display_name : ""; diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index be2469dc9e..e790e0bc1c 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -119,6 +119,7 @@ public: void AchievementEventHandler(const rc_runtime_event_t* runtime_event); std::recursive_mutex* GetLock(); + bool IsHardcoreModeActive() const; std::string GetPlayerDisplayName() const; u32 GetPlayerScore() const; const BadgeStatus& GetPlayerBadge() const; @@ -190,7 +191,7 @@ private: Common::WorkQueueThread> m_queue; Common::WorkQueueThread> m_image_queue; - std::recursive_mutex m_lock; + mutable std::recursive_mutex m_lock; }; // class AchievementManager #endif // USE_RETRO_ACHIEVEMENTS diff --git a/Source/Core/Core/Config/AchievementSettings.cpp b/Source/Core/Core/Config/AchievementSettings.cpp index a425605f8c..5edaa6a54c 100644 --- a/Source/Core/Core/Config/AchievementSettings.cpp +++ b/Source/Core/Core/Config/AchievementSettings.cpp @@ -1,6 +1,7 @@ // Copyright 2023 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#ifdef USE_RETRO_ACHIEVEMENTS #include "Core/Config/AchievementSettings.h" #include @@ -19,6 +20,8 @@ const Info RA_LEADERBOARDS_ENABLED{ {System::Achievements, "Achievements", "LeaderboardsEnabled"}, false}; const Info RA_RICH_PRESENCE_ENABLED{ {System::Achievements, "Achievements", "RichPresenceEnabled"}, false}; +const Info RA_HARDCORE_ENABLED{{System::Achievements, "Achievements", "HardcoreEnabled"}, + false}; const Info RA_PROGRESS_ENABLED{{System::Achievements, "Achievements", "ProgressEnabled"}, false}; const Info RA_BADGES_ENABLED{{System::Achievements, "Achievements", "BadgesEnabled"}, false}; @@ -26,3 +29,5 @@ const Info RA_UNOFFICIAL_ENABLED{{System::Achievements, "Achievements", "U false}; const Info RA_ENCORE_ENABLED{{System::Achievements, "Achievements", "EncoreEnabled"}, false}; } // namespace Config + +#endif // USE_RETRO_ACHIEVEMENTS diff --git a/Source/Core/Core/Config/AchievementSettings.h b/Source/Core/Core/Config/AchievementSettings.h index b17d00c65f..15277ca043 100644 --- a/Source/Core/Core/Config/AchievementSettings.h +++ b/Source/Core/Core/Config/AchievementSettings.h @@ -1,6 +1,7 @@ // Copyright 2023 Dolphin Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +#ifdef USE_RETRO_ACHIEVEMENTS #pragma once #include "Common/Config/Config.h" @@ -14,8 +15,11 @@ extern const Info RA_API_TOKEN; extern const Info RA_ACHIEVEMENTS_ENABLED; extern const Info RA_LEADERBOARDS_ENABLED; extern const Info RA_RICH_PRESENCE_ENABLED; +extern const Info RA_HARDCORE_ENABLED; extern const Info RA_PROGRESS_ENABLED; extern const Info RA_BADGES_ENABLED; extern const Info RA_UNOFFICIAL_ENABLED; extern const Info RA_ENCORE_ENABLED; } // namespace Config + +#endif // USE_RETRO_ACHIEVEMENTS