summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJMC47 <JMC4789@gmail.com>2025-10-08 17:19:14 -0400
committerGitHub <noreply@github.com>2025-10-08 17:19:14 -0400
commitbeebcb52e71b7d5b6b46692cebd4e9e8c6645358 (patch)
treeff24180df582362e3f4ec8aad5a70d8e5c1801e6 /Source/Core
parent03ef9b4995aac89eec97541782fb2ab2269bc255 (diff)
parent3cb8f234a73ffc83761d4d3790fcdaf2fda13382 (diff)
Merge pull request #13998 from fizzlepicklepop/master
DolphinQt: Add toggles for Speedrun timer + Achievement badges visibility
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/AchievementManager.cpp3
-rw-r--r--Source/Core/Core/Config/AchievementSettings.cpp4
-rw-r--r--Source/Core/Core/Config/AchievementSettings.h2
-rw-r--r--Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp38
-rw-r--r--Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.h4
-rw-r--r--Source/Core/VideoCommon/OnScreenUI.cpp22
6 files changed, 68 insertions, 5 deletions
diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp
index 789c9ffb12..eba842b562 100644
--- a/Source/Core/Core/AchievementManager.cpp
+++ b/Source/Core/Core/AchievementManager.cpp
@@ -679,6 +679,9 @@ AchievementManager::GetActiveChallenges() const
std::vector<std::string> AchievementManager::GetActiveLeaderboards() const
{
+ if (!Config::Get(Config::RA_LEADERBOARD_TRACKER_ENABLED))
+ return {};
+
std::vector<std::string> display_values;
for (u32 ix = 0; ix < MAX_DISPLAYED_LBOARDS && ix < m_active_leaderboards.size(); ix++)
{
diff --git a/Source/Core/Core/Config/AchievementSettings.cpp b/Source/Core/Core/Config/AchievementSettings.cpp
index 63945777cb..f3b3e43ebc 100644
--- a/Source/Core/Core/Config/AchievementSettings.cpp
+++ b/Source/Core/Core/Config/AchievementSettings.cpp
@@ -22,6 +22,10 @@ const Info<bool> RA_UNOFFICIAL_ENABLED{{System::Achievements, "Achievements", "U
const Info<bool> RA_ENCORE_ENABLED{{System::Achievements, "Achievements", "EncoreEnabled"}, false};
const Info<bool> RA_SPECTATOR_ENABLED{{System::Achievements, "Achievements", "SpectatorEnabled"},
false};
+const Info<bool> RA_LEADERBOARD_TRACKER_ENABLED{
+ {System::Achievements, "Achievements", "LeaderboardTrackerEnabled"}, true};
+const Info<bool> RA_CHALLENGE_INDICATORS_ENABLED{
+ {System::Achievements, "Achievements", "ChallengeIndicatorsEnabled"}, true};
const Info<bool> RA_DISCORD_PRESENCE_ENABLED{
{System::Achievements, "Achievements", "DiscordPresenceEnabled"}, false};
const Info<bool> RA_PROGRESS_ENABLED{{System::Achievements, "Achievements", "ProgressEnabled"},
diff --git a/Source/Core/Core/Config/AchievementSettings.h b/Source/Core/Core/Config/AchievementSettings.h
index f1552ec59c..c567c5565c 100644
--- a/Source/Core/Core/Config/AchievementSettings.h
+++ b/Source/Core/Core/Config/AchievementSettings.h
@@ -18,6 +18,8 @@ extern const Info<bool> RA_HARDCORE_ENABLED;
extern const Info<bool> RA_UNOFFICIAL_ENABLED;
extern const Info<bool> RA_ENCORE_ENABLED;
extern const Info<bool> RA_SPECTATOR_ENABLED;
+extern const Info<bool> RA_LEADERBOARD_TRACKER_ENABLED;
+extern const Info<bool> RA_CHALLENGE_INDICATORS_ENABLED;
extern const Info<bool> RA_DISCORD_PRESENCE_ENABLED;
extern const Info<bool> RA_PROGRESS_ENABLED;
} // namespace Config
diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
index 6d3ed55ebd..eeb19810e8 100644
--- a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
+++ b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.cpp
@@ -109,6 +109,16 @@ void AchievementSettingsWidget::CreateLayout()
"submitted to the server.<br><br>If this is on at game launch, it will not be turned off "
"until game close, because a RetroAchievements session will not be created.<br><br>If "
"this is off at game launch, it can be toggled freely while the game is running."));
+ m_common_leaderboard_tracker_enabled_input = new ToolTipCheckBox(tr("Show Leaderboard Tracker"));
+ m_common_leaderboard_tracker_enabled_input->SetDescription(
+ tr("Show the on-screen RetroAchievements leaderboard tracker.<br><br>This appears in the "
+ "bottom-right corner while competing in a leaderboard."));
+ m_common_challenge_indicators_enabled_input =
+ new ToolTipCheckBox(tr("Show Challenge Indicators"));
+ m_common_challenge_indicators_enabled_input->SetDescription(
+ tr("Show the on-screen RetroAchievements challenge indicators.<br><br>These appear as "
+ "achievement badges in the bottom-right corner while tracking progress within a "
+ "challenge."));
m_common_discord_presence_enabled_input = new ToolTipCheckBox(tr("Enable Discord Presence"));
m_common_discord_presence_enabled_input->SetDescription(
tr("Use RetroAchievements rich presence in your Discord status.<br><br>Show Current Game on "
@@ -138,6 +148,8 @@ void AchievementSettingsWidget::CreateLayout()
#ifdef USE_DISCORD_PRESENCE
m_common_layout->addWidget(m_common_discord_presence_enabled_input);
#endif // USE_DISCORD_PRESENCE
+ m_common_layout->addWidget(m_common_leaderboard_tracker_enabled_input);
+ m_common_layout->addWidget(m_common_challenge_indicators_enabled_input);
m_common_layout->addWidget(m_common_progress_enabled_input);
m_common_layout->setAlignment(Qt::AlignTop);
@@ -158,6 +170,10 @@ void AchievementSettingsWidget::ConnectWidgets()
&AchievementSettingsWidget::ToggleEncore);
connect(m_common_spectator_enabled_input, &QCheckBox::toggled, this,
&AchievementSettingsWidget::ToggleSpectator);
+ connect(m_common_leaderboard_tracker_enabled_input, &QCheckBox::toggled, this,
+ &AchievementSettingsWidget::ToggleLeaderboardTracker);
+ connect(m_common_challenge_indicators_enabled_input, &QCheckBox::toggled, this,
+ &AchievementSettingsWidget::ToggleChallengeIndicators);
connect(m_common_discord_presence_enabled_input, &QCheckBox::toggled, this,
&AchievementSettingsWidget::ToggleDiscordPresence);
connect(m_common_progress_enabled_input, &QCheckBox::toggled, this,
@@ -217,6 +233,14 @@ void AchievementSettingsWidget::LoadSettings()
->setChecked(Config::Get(Config::RA_SPECTATOR_ENABLED));
SignalBlocking(m_common_spectator_enabled_input)->setEnabled(enabled);
+ SignalBlocking(m_common_leaderboard_tracker_enabled_input)
+ ->setChecked(Config::Get(Config::RA_LEADERBOARD_TRACKER_ENABLED));
+ SignalBlocking(m_common_leaderboard_tracker_enabled_input)->setEnabled(enabled);
+
+ SignalBlocking(m_common_challenge_indicators_enabled_input)
+ ->setChecked(Config::Get(Config::RA_CHALLENGE_INDICATORS_ENABLED));
+ SignalBlocking(m_common_challenge_indicators_enabled_input)->setEnabled(enabled);
+
SignalBlocking(m_common_discord_presence_enabled_input)
->setChecked(Config::Get(Config::RA_DISCORD_PRESENCE_ENABLED));
SignalBlocking(m_common_discord_presence_enabled_input)
@@ -239,6 +263,10 @@ void AchievementSettingsWidget::SaveSettings()
Config::SetBaseOrCurrent(Config::RA_ENCORE_ENABLED, m_common_encore_enabled_input->isChecked());
Config::SetBaseOrCurrent(Config::RA_SPECTATOR_ENABLED,
m_common_spectator_enabled_input->isChecked());
+ Config::SetBaseOrCurrent(Config::RA_LEADERBOARD_TRACKER_ENABLED,
+ m_common_leaderboard_tracker_enabled_input->isChecked());
+ Config::SetBaseOrCurrent(Config::RA_CHALLENGE_INDICATORS_ENABLED,
+ m_common_challenge_indicators_enabled_input->isChecked());
Config::SetBaseOrCurrent(Config::RA_DISCORD_PRESENCE_ENABLED,
m_common_discord_presence_enabled_input->isChecked());
Config::SetBaseOrCurrent(Config::RA_PROGRESS_ENABLED,
@@ -310,6 +338,16 @@ void AchievementSettingsWidget::ToggleSpectator()
AchievementManager::GetInstance().SetSpectatorMode();
}
+void AchievementSettingsWidget::ToggleLeaderboardTracker()
+{
+ SaveSettings();
+}
+
+void AchievementSettingsWidget::ToggleChallengeIndicators()
+{
+ SaveSettings();
+}
+
void AchievementSettingsWidget::ToggleDiscordPresence()
{
SaveSettings();
diff --git a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.h b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.h
index 20a6d03c6d..2a7586ac24 100644
--- a/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.h
+++ b/Source/Core/DolphinQt/Achievements/AchievementSettingsWidget.h
@@ -36,6 +36,8 @@ private:
void ToggleUnofficial();
void ToggleEncore();
void ToggleSpectator();
+ void ToggleLeaderboardTracker();
+ void ToggleChallengeIndicators();
void ToggleDiscordPresence();
void ToggleProgress();
@@ -53,6 +55,8 @@ private:
ToolTipCheckBox* m_common_unofficial_enabled_input;
ToolTipCheckBox* m_common_encore_enabled_input;
ToolTipCheckBox* m_common_spectator_enabled_input;
+ ToolTipCheckBox* m_common_leaderboard_tracker_enabled_input;
+ ToolTipCheckBox* m_common_challenge_indicators_enabled_input;
ToolTipCheckBox* m_common_discord_presence_enabled_input;
ToolTipCheckBox* m_common_progress_enabled_input;
};
diff --git a/Source/Core/VideoCommon/OnScreenUI.cpp b/Source/Core/VideoCommon/OnScreenUI.cpp
index 4689bb6321..834971fa0b 100644
--- a/Source/Core/VideoCommon/OnScreenUI.cpp
+++ b/Source/Core/VideoCommon/OnScreenUI.cpp
@@ -8,6 +8,7 @@
#include "Common/Timer.h"
#include "Core/AchievementManager.h"
+#include "Core/Config/AchievementSettings.h"
#include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "Core/Config/NetplaySettings.h"
@@ -324,10 +325,21 @@ void OnScreenUI::DrawChallengesAndLeaderboards()
#ifdef USE_RETRO_ACHIEVEMENTS
auto& instance = AchievementManager::GetInstance();
std::lock_guard lg{instance.GetLock()};
- if (instance.AreChallengesUpdated())
+ const bool challenge_indicators_enabled = Config::Get(Config::RA_CHALLENGE_INDICATORS_ENABLED);
+ const bool challenges_updated = instance.AreChallengesUpdated();
+ const auto& challenges = instance.GetActiveChallenges();
+
+ if (!challenge_indicators_enabled)
+ {
+ if (challenges_updated)
+ instance.ResetChallengesUpdated();
+ if (!m_challenge_texture_map.empty())
+ m_challenge_texture_map.clear();
+ }
+ else if (challenges_updated || m_challenge_texture_map.size() != challenges.size())
{
- instance.ResetChallengesUpdated();
- const auto& challenges = instance.GetActiveChallenges();
+ if (challenges_updated)
+ instance.ResetChallengesUpdated();
m_challenge_texture_map.clear();
for (const auto& name : challenges)
{
@@ -343,7 +355,7 @@ void OnScreenUI::DrawChallengesAndLeaderboards()
}
float leaderboard_y = ImGui::GetIO().DisplaySize.y;
- if (!m_challenge_texture_map.empty())
+ if (challenge_indicators_enabled && !m_challenge_texture_map.empty())
{
float scale = ImGui::GetIO().DisplaySize.y / 1024.0;
ImGui::SetNextWindowSize(ImVec2(0, 0));
@@ -367,7 +379,7 @@ void OnScreenUI::DrawChallengesAndLeaderboards()
}
const auto& leaderboard_progress = instance.GetActiveLeaderboards();
- if (!leaderboard_progress.empty())
+ if (Config::Get(Config::RA_LEADERBOARD_TRACKER_ENABLED) && !leaderboard_progress.empty())
{
ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x, leaderboard_y), 0,
ImVec2(1.0, 1.0));