From 3f924d1494aa7f94e51dabfd64b8b35b998e300f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Mon, 10 Jul 2023 21:04:22 +0200 Subject: [PATCH] Smoothly remove any left-over overlays on emuscreen exit. --- Common/System/OSD.cpp | 29 +++++++++++++++++++++++++++++ Common/System/OSD.h | 3 +++ UI/EmuScreen.cpp | 5 +++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/Common/System/OSD.cpp b/Common/System/OSD.cpp index 02d1e4d2c..4dc226b3e 100644 --- a/Common/System/OSD.cpp +++ b/Common/System/OSD.cpp @@ -235,3 +235,32 @@ void OnScreenDisplay::RemoveProgressBar(std::string id) { } } } + +// Fades out everything related to achievements. Should be used on game shutdown. +void OnScreenDisplay::ClearAchievementStuff() { + double now = time_now_d(); + for (auto &iter : entries_) { + switch (iter.type) { + case OSDType::ACHIEVEMENT_CHALLENGE_INDICATOR: + case OSDType::ACHIEVEMENT_UNLOCKED: + case OSDType::ACHIEVEMENT_PROGRESS: + case OSDType::LEADERBOARD_TRACKER: + iter.endTime = now; + break; + default: + break; + } + } + for (auto &iter : sideEntries_) { + switch (iter.type) { + case OSDType::ACHIEVEMENT_CHALLENGE_INDICATOR: + case OSDType::ACHIEVEMENT_UNLOCKED: + case OSDType::ACHIEVEMENT_PROGRESS: + case OSDType::LEADERBOARD_TRACKER: + iter.endTime = now; + break; + default: + break; + } + } +} diff --git a/Common/System/OSD.h b/Common/System/OSD.h index 53253c9fe..7cba61df4 100644 --- a/Common/System/OSD.h +++ b/Common/System/OSD.h @@ -57,6 +57,9 @@ public: void SetShowSidebar(bool show) { showSidebar_ = show; } bool ShowSidebar() const { return showSidebar_; } + // Fades out everything related to achievements. Should be used on game shutdown. + void ClearAchievementStuff(); + struct Entry { OSDType type; std::string text; diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index faac87a4a..a1df637b0 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -404,11 +404,12 @@ void EmuScreen::bootComplete() { } EmuScreen::~EmuScreen() { + // If we were invalid, it would already be shutdown. + Achievements::UnloadGame(); if (!invalid_ || bootPending_) { - // If we were invalid, it would already be shutdown. - Achievements::UnloadGame(); PSP_Shutdown(); } + g_OSD.ClearAchievementStuff(); SetExtraAssertInfo(nullptr);