From 2372b6a3865787929ced19d358471359b9d7f4a6 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Tue, 2 Jul 2024 02:43:35 -0400 Subject: [PATCH 1/2] Add Open Achievements Hotkey Adds a hotkey to pause emulation and bring up the Achievements dialog. --- Source/Core/Core/HotkeyManager.cpp | 10 ++++++++++ Source/Core/Core/HotkeyManager.h | 3 +++ Source/Core/DolphinQt/HotkeyScheduler.cpp | 5 +++++ Source/Core/DolphinQt/HotkeyScheduler.h | 3 +++ Source/Core/DolphinQt/MainWindow.cpp | 4 ++++ 5 files changed, 25 insertions(+) diff --git a/Source/Core/Core/HotkeyManager.cpp b/Source/Core/Core/HotkeyManager.cpp index 83b0c31616..3d0a153fd6 100644 --- a/Source/Core/Core/HotkeyManager.cpp +++ b/Source/Core/Core/HotkeyManager.cpp @@ -38,6 +38,9 @@ constexpr std::array s_hotkey_labels{{ _trans("Center Mouse"), _trans("Activate NetPlay Chat"), _trans("Control NetPlay Golf Mode"), +#ifdef USE_RETRO_ACHIEVEMENTS + _trans("Open Achievements"), +#endif // USE_RETRO_ACHIEVEMENTS _trans("Volume Down"), _trans("Volume Up"), @@ -330,7 +333,11 @@ struct HotkeyGroupInfo }; constexpr std::array s_groups_info = { +#ifdef USE_RETRO_ACHIEVEMENTS + {{_trans("General"), HK_OPEN, HK_OPEN_ACHIEVEMENTS}, +#else // USE_RETRO_ACHIEVEMENTS {{_trans("General"), HK_OPEN, HK_REQUEST_GOLF_CONTROL}, +#endif // USE_RETROACHIEVEMENTS {_trans("Volume"), HK_VOLUME_DOWN, HK_VOLUME_TOGGLE_MUTE}, {_trans("Emulation Speed"), HK_DECREASE_EMULATION_SPEED, HK_TOGGLE_THROTTLE}, {_trans("Frame Advance"), HK_FRAME_ADVANCE, HK_FRAME_ADVANCE_RESET_SPEED}, @@ -448,6 +455,9 @@ void HotkeyManager::LoadDefaults(const ControllerInterface& ciface) set_key_expression(HK_STOP, "Escape"); set_key_expression(HK_FULLSCREEN, hotkey_string({"Alt", "Return"})); #endif +#ifdef USE_RETRO_ACHIEVEMENTS + set_key_expression(HK_OPEN_ACHIEVEMENTS, hotkey_string({"Alt", "A"})); +#endif // USE_RETRO_ACHIEVEMENTS set_key_expression(HK_STEP, "F11"); set_key_expression(HK_STEP_OVER, hotkey_string({"Shift", "F10"})); set_key_expression(HK_STEP_OUT, hotkey_string({"Shift", "F11"})); diff --git a/Source/Core/Core/HotkeyManager.h b/Source/Core/Core/HotkeyManager.h index aae894cb5b..bb287b6561 100644 --- a/Source/Core/Core/HotkeyManager.h +++ b/Source/Core/Core/HotkeyManager.h @@ -32,6 +32,9 @@ enum Hotkey HK_CENTER_MOUSE, HK_ACTIVATE_CHAT, HK_REQUEST_GOLF_CONTROL, +#ifdef USE_RETRO_ACHIEVEMENTS + HK_OPEN_ACHIEVEMENTS, +#endif // USE_RETRO_ACHIEVEMENTS HK_VOLUME_DOWN, HK_VOLUME_UP, diff --git a/Source/Core/DolphinQt/HotkeyScheduler.cpp b/Source/Core/DolphinQt/HotkeyScheduler.cpp index 39e4633a9e..232f41c2f8 100644 --- a/Source/Core/DolphinQt/HotkeyScheduler.cpp +++ b/Source/Core/DolphinQt/HotkeyScheduler.cpp @@ -192,6 +192,11 @@ void HotkeyScheduler::Run() if (IsHotkey(HK_EXIT)) emit ExitHotkey(); +#ifdef USE_RETRO_ACHIEVEMENTS + if (IsHotkey(HK_OPEN_ACHIEVEMENTS)) + emit OpenAchievements(); +#endif // USE_RETRO_ACHIEVEMENTS + if (!Core::IsRunning(system)) { // Only check for Play Recording hotkey when no game is running diff --git a/Source/Core/DolphinQt/HotkeyScheduler.h b/Source/Core/DolphinQt/HotkeyScheduler.h index 97a43be72e..c61cdb265d 100644 --- a/Source/Core/DolphinQt/HotkeyScheduler.h +++ b/Source/Core/DolphinQt/HotkeyScheduler.h @@ -53,6 +53,9 @@ signals: void ExportRecording(); void ToggleReadOnlyMode(); void ConnectWiiRemote(int id); +#ifdef USE_RETRO_ACHIEVEMENTS + void OpenAchievements(); +#endif // USE_RETRO_ACHIEVEMENTS void Step(); void StepOver(); diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index 772fee9abf..e68673a205 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -658,6 +658,10 @@ void MainWindow::ConnectHotkeys() movie.SetReadOnly(read_only); emit ReadOnlyModeChanged(read_only); }); +#ifdef USE_RETRO_ACHIEVEMENTS + connect(m_hotkey_scheduler, &HotkeyScheduler::OpenAchievements, this, + &MainWindow::ShowAchievementsWindow, Qt::QueuedConnection); +#endif // USE_RETRO_ACHIEVEMENTS connect(m_hotkey_scheduler, &HotkeyScheduler::Step, m_code_widget, &CodeWidget::Step); connect(m_hotkey_scheduler, &HotkeyScheduler::StepOver, m_code_widget, &CodeWidget::StepOver); From 8b427de28f0674948098a24f5807aad647af7426 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Tue, 2 Jul 2024 08:49:39 -0400 Subject: [PATCH 2/2] Remove popups for challenges The challenge popups have proven to be excessive and are no longer useful thanks to the achievements hotkey. Instead, those events will ask for an immediate RP-level update to the achievements dialog, which will among other things re-sort the dialog to show challenges on top faster. --- Source/Core/Core/AchievementManager.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp index 7d7c0af374..544ec36afc 100644 --- a/Source/Core/Core/AchievementManager.cpp +++ b/Source/Core/Core/AchievementManager.cpp @@ -882,9 +882,7 @@ void AchievementManager::HandleAchievementChallengeIndicatorShowEvent( const auto [iter, inserted] = instance.m_active_challenges.insert(client_event->achievement->id); if (inserted) instance.m_challenges_updated = true; - OSD::AddMessage(fmt::format("Challenge Started: {}", client_event->achievement->title), - OSD::Duration::VERY_LONG, OSD::Color::GREEN, - &instance.GetAchievementBadge(client_event->achievement->id, false)); + AchievementManager::GetInstance().m_update_callback(UpdatedItems{.rich_presence = true}); } void AchievementManager::HandleAchievementChallengeIndicatorHideEvent( @@ -894,9 +892,7 @@ void AchievementManager::HandleAchievementChallengeIndicatorHideEvent( const auto removed = instance.m_active_challenges.erase(client_event->achievement->id); if (removed > 0) instance.m_challenges_updated = true; - OSD::AddMessage(fmt::format("Challenge Ended: {}", client_event->achievement->title), - OSD::Duration::VERY_LONG, OSD::Color::GREEN, - &instance.GetAchievementBadge(client_event->achievement->id, false)); + AchievementManager::GetInstance().m_update_callback(UpdatedItems{.rich_presence = true}); } void AchievementManager::HandleAchievementProgressIndicatorShowEvent(