From 0883aa114e1269c56989ad5e2e9503690d11fcd0 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Wed, 3 Apr 2024 15:55:00 -0400 Subject: [PATCH] Update hardcore toggle to use rc_client The client can take care of itself and handle its own hardcore status when it toggles, so I can tell the settings widget to contact the manager directly to set it. Also, gradually reorganizing the settings dialog over the next handful of commits. --- Source/Core/Core/AchievementManager.cpp | 15 +++++++++------ Source/Core/Core/AchievementManager.h | 1 + .../Core/Core/Config/AchievementSettings.cpp | 2 +- .../AchievementSettingsWidget.cpp | 19 +++++++++++-------- 4 files changed, 22 insertions(+), 15 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index a3b20abbfe..db1856eee8 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -45,7 +45,7 @@ void AchievementManager::Init() [](const char* message, const rc_client_t* client) { INFO_LOG_FMT(ACHIEVEMENTS, "{}", message); }); - rc_client_set_hardcore_enabled(m_client, 0); + rc_client_set_hardcore_enabled(m_client, Config::Get(Config::RA_HARDCORE_ENABLED)); rc_client_set_unofficial_enabled(m_client, 1); m_queue.Reset("AchievementManagerQueue", [](const std::function& func) { func(); }); m_image_queue.Reset("AchievementManagerImageQueue", @@ -240,16 +240,19 @@ std::recursive_mutex& AchievementManager::GetLock() return m_lock; } +void AchievementManager::SetHardcoreMode() +{ + rc_client_set_hardcore_enabled(m_client, Config::Get(Config::RA_HARDCORE_ENABLED)); +} + bool AchievementManager::IsHardcoreModeActive() const { std::lock_guard lg{m_lock}; - if (!Config::Get(Config::RA_HARDCORE_ENABLED)) + if (!rc_client_get_hardcore_enabled(m_client)) return false; - if (!Core::IsRunning()) + if (!rc_client_get_game_info(m_client)) return true; - if (!IsGameLoaded()) - return false; - return (m_runtime.trigger_count + m_runtime.lboard_count > 0); + return rc_client_is_processing_required(m_client); } std::string_view AchievementManager::GetPlayerDisplayName() const diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h index 41f09f94b7..2a3658e662 100644 --- a/Source/Core/Core/AchievementManager.h +++ b/Source/Core/Core/AchievementManager.h @@ -103,6 +103,7 @@ public: void DoFrame(); std::recursive_mutex& GetLock(); + void SetHardcoreMode(); bool IsHardcoreModeActive() const; std::string_view GetPlayerDisplayName() const; u32 GetPlayerScore() const; diff --git a/Source/Core/Core/Config/AchievementSettings.cpp b/Source/Core/Core/Config/AchievementSettings.cpp index 6a23e827e6..8b126e3c54 100644 --- a/Source/Core/Core/Config/AchievementSettings.cpp +++ b/Source/Core/Core/Config/AchievementSettings.cpp @@ -16,7 +16,7 @@ const Info RA_HOST_URL{{System::Achievements, "Achievements", "Host const Info RA_USERNAME{{System::Achievements, "Achievements", "Username"}, ""}; const Info RA_API_TOKEN{{System::Achievements, "Achievements", "ApiToken"}, ""}; const Info RA_HARDCORE_ENABLED{{System::Achievements, "Achievements", "HardcoreEnabled"}, - false}; + true}; const Info RA_PROGRESS_ENABLED{{System::Achievements, "Achievements", "ProgressEnabled"}, false}; const Info RA_BADGES_ENABLED{{System::Achievements, "Achievements", "BadgesEnabled"}, false}; diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp index 1c03be7f35..159628f6df 100644 --- a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp +++ b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp @@ -61,12 +61,6 @@ void AchievementSettingsWidget::CreateLayout() m_common_login_failed = new QLabel(tr("Login Failed")); m_common_login_failed->setStyleSheet(QStringLiteral("QLabel { color : red; }")); m_common_login_failed->setVisible(false); - m_common_unofficial_enabled_input = new ToolTipCheckBox(tr("Enable Unofficial Achievements")); - m_common_unofficial_enabled_input->SetDescription( - tr("Enable unlocking unofficial achievements as well as official " - "achievements.

Unofficial achievements may be optional or unfinished achievements " - "that have not been deemed official by RetroAchievements and may be useful for testing or " - "simply for fun.")); m_common_hardcore_enabled_input = new ToolTipCheckBox(tr("Enable Hardcore Mode")); m_common_hardcore_enabled_input->SetDescription( tr("Enable Hardcore Mode on RetroAchievements.

Hardcore Mode is intended to provide " @@ -81,6 +75,12 @@ void AchievementSettingsWidget::CreateLayout() "playing.
Close your current game before enabling.
Be aware that " "turning Hardcore Mode off while a game is running requires the game to be closed before " "re-enabling.")); + m_common_unofficial_enabled_input = new ToolTipCheckBox(tr("Enable Unofficial Achievements")); + m_common_unofficial_enabled_input->SetDescription( + tr("Enable unlocking unofficial achievements as well as official " + "achievements.

Unofficial achievements may be optional or unfinished achievements " + "that have not been deemed official by RetroAchievements and may be useful for testing or " + "simply for fun.")); m_common_progress_enabled_input = new ToolTipCheckBox(tr("Enable Progress Notifications")); m_common_progress_enabled_input->SetDescription( tr("Enable progress notifications on achievements.

Displays a brief popup message " @@ -105,11 +105,13 @@ void AchievementSettingsWidget::CreateLayout() m_common_layout->addWidget(m_common_login_button); m_common_layout->addWidget(m_common_logout_button); m_common_layout->addWidget(m_common_login_failed); + m_common_layout->addWidget(new QLabel(tr("Function Settings"))); m_common_layout->addWidget(m_common_hardcore_enabled_input); - m_common_layout->addWidget(m_common_progress_enabled_input); - m_common_layout->addWidget(m_common_badges_enabled_input); m_common_layout->addWidget(m_common_unofficial_enabled_input); m_common_layout->addWidget(m_common_encore_enabled_input); + m_common_layout->addWidget(new QLabel(tr("Display Settings"))); + m_common_layout->addWidget(m_common_progress_enabled_input); + m_common_layout->addWidget(m_common_badges_enabled_input); m_common_layout->setAlignment(Qt::AlignTop); setLayout(m_common_layout); @@ -229,6 +231,7 @@ void AchievementSettingsWidget::Logout() void AchievementSettingsWidget::ToggleHardcore() { SaveSettings(); + AchievementManager::GetInstance().SetHardcoreMode(); if (Config::Get(Config::RA_HARDCORE_ENABLED)) { if (Config::Get(Config::MAIN_EMULATION_SPEED) < 1.0f)