From 4dd6365a99ee591c136bf2e36ef376013ee17b04 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Mon, 27 Jan 2025 14:54:16 +1000 Subject: [PATCH] System: Simplify HC disable confirm on startup Use one path on all platforms, always asynchronous. --- src/core/achievements.cpp | 44 +-------------------------------------- src/core/achievements.h | 1 - src/core/system.cpp | 40 +++++++++++++---------------------- 3 files changed, 15 insertions(+), 70 deletions(-) diff --git a/src/core/achievements.cpp b/src/core/achievements.cpp index 4e24767cc..eff4390ad 100644 --- a/src/core/achievements.cpp +++ b/src/core/achievements.cpp @@ -2228,26 +2228,6 @@ bool Achievements::ConfirmSystemReset() return true; } -bool Achievements::ConfirmHardcoreModeDisable(const char* trigger) -{ -#ifdef ENABLE_RAINTEGRATION - if (IsUsingRAIntegration()) - return (RA_WarnDisableHardcore(trigger) != 0); -#endif - - // I really hope this doesn't deadlock :/ - const bool confirmed = Host::ConfirmMessage( - TRANSLATE("Achievements", "Confirm Hardcore Mode"), - fmt::format(TRANSLATE_FS("Achievements", "{0} cannot be performed while hardcore mode is active. Do you " - "want to disable hardcore mode? {0} will be cancelled if you select No."), - trigger)); - if (!confirmed) - return false; - - DisableHardcoreMode(); - return true; -} - void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::function callback) { auto real_callback = [callback = std::move(callback)](bool res) mutable { @@ -2259,43 +2239,21 @@ void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::fun }); }; -#ifndef __ANDROID__ #ifdef ENABLE_RAINTEGRATION if (IsUsingRAIntegration()) { const bool result = (RA_WarnDisableHardcore(trigger) != 0); - callback(result); + real_callback(result); return; } #endif - GPUThread::RunOnThread([trigger = std::string(trigger), real_callback = std::move(real_callback)]() mutable { - if (!FullscreenUI::Initialize()) - { - Host::AddOSDMessage( - fmt::format(TRANSLATE_FS("Achievements", "Cannot {} while hardcode mode is active."), trigger), - Host::OSD_WARNING_DURATION); - real_callback(false); - return; - } - - ImGuiFullscreen::OpenConfirmMessageDialog( - TRANSLATE_STR("Achievements", "Confirm Hardcore Mode"), - fmt::format(TRANSLATE_FS("Achievements", - "{0} cannot be performed while hardcore mode is active. Do you " - "want to disable hardcore mode? {0} will be cancelled if you select No."), - trigger), - std::move(real_callback), fmt::format(ICON_FA_CHECK " {}", TRANSLATE_SV("Achievements", "Yes")), - fmt::format(ICON_FA_TIMES " {}", TRANSLATE_SV("Achievements", "No"))); - }); -#else Host::ConfirmMessageAsync( TRANSLATE_STR("Achievements", "Confirm Hardcore Mode"), fmt::format(TRANSLATE_FS("Achievements", "{0} cannot be performed while hardcore mode is active. Do you want to " "disable hardcore mode? {0} will be cancelled if you select No."), trigger), std::move(real_callback)); -#endif } void Achievements::ClearUIState() diff --git a/src/core/achievements.h b/src/core/achievements.h index e14928ff3..900d179be 100644 --- a/src/core/achievements.h +++ b/src/core/achievements.h @@ -116,7 +116,6 @@ bool ResetHardcoreMode(bool is_booting); void DisableHardcoreMode(); /// Prompts the user to disable hardcore mode, if they agree, returns true. -bool ConfirmHardcoreModeDisable(const char* trigger); void ConfirmHardcoreModeDisableAsync(const char* trigger, std::function callback); /// Returns true if hardcore mode is active, and functionality should be restricted. diff --git a/src/core/system.cpp b/src/core/system.cpp index d17df9f19..5b639bb82 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -1753,33 +1753,21 @@ bool System::BootSystem(SystemBootParameters parameters, Error* error) if ((!parameters.save_state.empty() || !exe_override.empty()) && Achievements::IsHardcoreModeActive()) { const bool is_exe_override_boot = parameters.save_state.empty(); - bool cancelled; - if (FullscreenUI::IsInitialized()) - { - Achievements::ConfirmHardcoreModeDisableAsync(is_exe_override_boot ? - TRANSLATE("Achievements", "Overriding executable") : - TRANSLATE("Achievements", "Resuming state"), - [parameters = std::move(parameters)](bool approved) mutable { - if (approved) - { - parameters.disable_achievements_hardcore_mode = true; - BootSystem(std::move(parameters), nullptr); - } - }); - cancelled = true; - } - else - { - cancelled = !Achievements::ConfirmHardcoreModeDisable(is_exe_override_boot ? - TRANSLATE("Achievements", "Overriding executable") : - TRANSLATE("Achievements", "Resuming state")); - } + Achievements::ConfirmHardcoreModeDisableAsync( + is_exe_override_boot ? TRANSLATE("Achievements", "Overriding executable") : + TRANSLATE("Achievements", "Resuming state"), + [parameters = std::move(parameters)](bool approved) mutable { + if (approved) + { + Host::RunOnCPUThread([parameters = std::move(parameters)]() mutable { + parameters.disable_achievements_hardcore_mode = true; + BootSystem(std::move(parameters), nullptr); + }); + } + }); - if (cancelled) - { - // Technically a failure, but user-initiated. Returning false here would try to display a non-existent error. - return true; - } + // Technically a failure, but user-initiated. Returning false here would try to display a non-existent error. + return true; } }