mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
Merge pull request #12949 from LillyJadeKatrin/retroachievements-new-dev-branch
RetroAchievements - Dev Branch Refactor
This commit is contained in:
@ -22,7 +22,7 @@
|
||||
|
||||
static constexpr size_t PROGRESS_LENGTH = 24;
|
||||
|
||||
AchievementBox::AchievementBox(QWidget* parent, rc_client_achievement_t* achievement)
|
||||
AchievementBox::AchievementBox(QWidget* parent, const rc_client_achievement_t* achievement)
|
||||
: QGroupBox(parent), m_achievement(achievement)
|
||||
{
|
||||
const auto& instance = AchievementManager::GetInstance();
|
||||
|
@ -18,7 +18,7 @@ class AchievementBox final : public QGroupBox
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AchievementBox(QWidget* parent, rc_client_achievement_t* achievement);
|
||||
explicit AchievementBox(QWidget* parent, const rc_client_achievement_t* achievement);
|
||||
void UpdateData();
|
||||
void UpdateProgress();
|
||||
|
||||
@ -28,7 +28,7 @@ private:
|
||||
QProgressBar* m_progress_bar;
|
||||
QLabel* m_progress_label;
|
||||
|
||||
rc_client_achievement_t* m_achievement;
|
||||
const rc_client_achievement_t* m_achievement;
|
||||
};
|
||||
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
@ -34,10 +34,6 @@ AchievementSettingsWidget::AchievementSettingsWidget(QWidget* parent) : QWidget(
|
||||
|
||||
connect(&Settings::Instance(), &Settings::ConfigChanged, this,
|
||||
&AchievementSettingsWidget::LoadSettings);
|
||||
|
||||
// If hardcore is enabled when the emulator starts, make sure it turns off what it needs to
|
||||
if (Config::Get(Config::RA_HARDCORE_ENABLED))
|
||||
UpdateHardcoreMode();
|
||||
}
|
||||
|
||||
void AchievementSettingsWidget::UpdateData(int login_failed_code)
|
||||
@ -256,10 +252,9 @@ void AchievementSettingsWidget::ToggleRAIntegration()
|
||||
|
||||
auto& instance = AchievementManager::GetInstance();
|
||||
if (Config::Get(Config::RA_ENABLED))
|
||||
instance.Init();
|
||||
instance.Init(reinterpret_cast<void*>(winId()));
|
||||
else
|
||||
instance.Shutdown();
|
||||
UpdateHardcoreMode();
|
||||
}
|
||||
|
||||
void AchievementSettingsWidget::Login()
|
||||
@ -297,7 +292,6 @@ void AchievementSettingsWidget::ToggleHardcore()
|
||||
}
|
||||
}
|
||||
SaveSettings();
|
||||
UpdateHardcoreMode();
|
||||
}
|
||||
|
||||
void AchievementSettingsWidget::ToggleUnofficial()
|
||||
@ -327,14 +321,4 @@ void AchievementSettingsWidget::ToggleProgress()
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
void AchievementSettingsWidget::UpdateHardcoreMode()
|
||||
{
|
||||
if (Config::Get(Config::RA_HARDCORE_ENABLED))
|
||||
{
|
||||
Settings::Instance().SetDebugModeEnabled(false);
|
||||
}
|
||||
emit Settings::Instance().EmulationStateChanged(Core::GetState(Core::System::GetInstance()));
|
||||
emit Settings::Instance().HardcoreStateChanged();
|
||||
}
|
||||
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
@ -39,8 +39,6 @@ private:
|
||||
void ToggleDiscordPresence();
|
||||
void ToggleProgress();
|
||||
|
||||
void UpdateHardcoreMode();
|
||||
|
||||
QGroupBox* m_common_box;
|
||||
QVBoxLayout* m_common_layout;
|
||||
ToolTipCheckBox* m_common_integration_enabled_input;
|
||||
|
@ -39,8 +39,6 @@ AchievementsWindow::AchievementsWindow(QWidget* parent) : QDialog(parent)
|
||||
});
|
||||
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
|
||||
[this] { m_settings_widget->UpdateData(RC_OK); });
|
||||
connect(&Settings::Instance(), &Settings::HardcoreStateChanged, this,
|
||||
[this] { AchievementsWindow::UpdateData({.all = true}); });
|
||||
}
|
||||
|
||||
void AchievementsWindow::showEvent(QShowEvent* event)
|
||||
|
@ -677,4 +677,7 @@ endif()
|
||||
if(USE_RETRO_ACHIEVEMENTS)
|
||||
target_link_libraries(dolphin-emu PRIVATE rcheevos)
|
||||
target_compile_definitions(dolphin-emu PRIVATE -DUSE_RETRO_ACHIEVEMENTS)
|
||||
if(RC_CLIENT_SUPPORTS_RAINTEGRATION)
|
||||
target_compile_definitions(dolphin-emu PRIVATE -DRC_CLIENT_SUPPORTS_RAINTEGRATION)
|
||||
endif()
|
||||
endif()
|
||||
|
@ -43,6 +43,7 @@
|
||||
#include "Core/BootManager.h"
|
||||
#include "Core/CommonTitles.h"
|
||||
#include "Core/Config/AchievementSettings.h"
|
||||
#include "Core/Config/FreeLookSettings.h"
|
||||
#include "Core/Config/MainSettings.h"
|
||||
#include "Core/Config/NetplaySettings.h"
|
||||
#include "Core/Config/UISettings.h"
|
||||
@ -272,9 +273,15 @@ MainWindow::MainWindow(Core::System& system, std::unique_ptr<BootParameters> boo
|
||||
NetPlayInit();
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
AchievementManager::GetInstance().Init();
|
||||
AchievementManager::GetInstance().Init(reinterpret_cast<void*>(winId()));
|
||||
if (AchievementManager::GetInstance().IsHardcoreModeActive())
|
||||
Settings::Instance().SetDebugModeEnabled(false);
|
||||
// This needs to trigger on both RA_HARDCORE_ENABLED and RA_ENABLED
|
||||
Config::AddConfigChangedCallback(
|
||||
[this]() { QueueOnObject(this, [this] { this->OnHardcoreChanged(); }); });
|
||||
// If hardcore is enabled when the emulator starts, make sure it turns off what it needs to
|
||||
if (Config::Get(Config::RA_HARDCORE_ENABLED))
|
||||
OnHardcoreChanged();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
#if defined(__unix__) || defined(__unix) || defined(__APPLE__)
|
||||
@ -935,7 +942,11 @@ bool MainWindow::RequestStop()
|
||||
else
|
||||
FullScreen();
|
||||
|
||||
if (Config::Get(Config::MAIN_CONFIRM_ON_STOP))
|
||||
bool confirm_on_stop = Config::Get(Config::MAIN_CONFIRM_ON_STOP);
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
confirm_on_stop = confirm_on_stop || AchievementManager::GetInstance().CheckForModifications();
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
if (confirm_on_stop)
|
||||
{
|
||||
if (std::exchange(m_stop_confirm_showing, true))
|
||||
return true;
|
||||
@ -960,13 +971,27 @@ bool MainWindow::RequestStop()
|
||||
// This is to avoid any "race conditions" between the "Window Activate" message and the
|
||||
// message box returning, which could break cursor locking depending on the order
|
||||
m_render_widget->SetWaitingForMessageBox(true);
|
||||
auto confirm = ModalMessageBox::question(
|
||||
confirm_parent, tr("Confirm"),
|
||||
m_stop_requested ? tr("A shutdown is already in progress. Unsaved data "
|
||||
"may be lost if you stop the current emulation "
|
||||
"before it completes. Force stop?") :
|
||||
tr("Do you want to stop the current emulation?"),
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::NoButton, Qt::ApplicationModal);
|
||||
QString message;
|
||||
if (m_stop_requested)
|
||||
{
|
||||
message = tr("A shutdown is already in progress. Unsaved data "
|
||||
"may be lost if you stop the current emulation "
|
||||
"before it completes. Force stop?");
|
||||
}
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
else if (AchievementManager::GetInstance().CheckForModifications())
|
||||
{
|
||||
message = tr(
|
||||
"Do you want to stop the current emulation? Unsaved achievement modifications detected.");
|
||||
}
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
else
|
||||
{
|
||||
message = tr("Do you want to stop the current emulation?");
|
||||
}
|
||||
auto confirm = ModalMessageBox::question(confirm_parent, tr("Confirm"), message,
|
||||
QMessageBox::Yes | QMessageBox::No,
|
||||
QMessageBox::NoButton, Qt::ApplicationModal);
|
||||
|
||||
// If a user confirmed stopping the emulation, we do not capture the cursor again,
|
||||
// even if the render widget will stay alive for a while.
|
||||
@ -1992,6 +2017,13 @@ void MainWindow::ShowAchievementSettings()
|
||||
ShowAchievementsWindow();
|
||||
m_achievements_window->ForceSettingsTab();
|
||||
}
|
||||
|
||||
void MainWindow::OnHardcoreChanged()
|
||||
{
|
||||
if (Config::Get(Config::RA_HARDCORE_ENABLED))
|
||||
Settings::Instance().SetDebugModeEnabled(false);
|
||||
emit Settings::Instance().EmulationStateChanged(Core::GetState(Core::System::GetInstance()));
|
||||
}
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
void MainWindow::ShowMemcardManager()
|
||||
|
@ -181,6 +181,7 @@ private:
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
void ShowAchievementsWindow();
|
||||
void ShowAchievementSettings();
|
||||
void OnHardcoreChanged();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
void NetPlayInit();
|
||||
|
@ -64,6 +64,7 @@
|
||||
#include "DolphinQt/QtUtils/DolphinFileDialog.h"
|
||||
#include "DolphinQt/QtUtils/ModalMessageBox.h"
|
||||
#include "DolphinQt/QtUtils/ParallelProgressDialog.h"
|
||||
#include "DolphinQt/QtUtils/QueueOnObject.h"
|
||||
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
|
||||
#include "DolphinQt/Settings.h"
|
||||
#include "DolphinQt/Updater.h"
|
||||
@ -71,6 +72,10 @@
|
||||
#include "UICommon/AutoUpdate.h"
|
||||
#include "UICommon/GameFile.h"
|
||||
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
#include <rcheevos/include/rc_client_raintegration.h>
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
|
||||
QPointer<MenuBar> MenuBar::s_menu_bar;
|
||||
|
||||
QString MenuBar::GetSignatureSelector() const
|
||||
@ -284,8 +289,14 @@ void MenuBar::AddToolsMenu()
|
||||
tools_menu->addSeparator();
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
tools_menu->addAction(tr("Achievements"), this, [this] { emit ShowAchievementsWindow(); });
|
||||
|
||||
m_achievements_action =
|
||||
tools_menu->addAction(tr("Achievements"), this, [this] { emit ShowAchievementsWindow(); });
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
m_achievements_dev_menu = tools_menu->addMenu(tr("RetroAchievements Development"));
|
||||
AchievementManager::GetInstance().SetDevMenuUpdateCallback(
|
||||
[this]() { QueueOnObject(this, [this] { this->UpdateAchievementDevelopmentMenu(); }); });
|
||||
m_achievements_dev_menu->menuAction()->setVisible(false);
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
tools_menu->addSeparator();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
@ -1124,6 +1135,38 @@ void MenuBar::UpdateToolsMenu(const Core::State state)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
void MenuBar::UpdateAchievementDevelopmentMenu()
|
||||
{
|
||||
auto* dev_menu = AchievementManager::GetInstance().GetDevelopmentMenu();
|
||||
if (dev_menu)
|
||||
{
|
||||
m_achievements_dev_menu->menuAction()->setVisible(true);
|
||||
m_achievements_dev_menu->clear();
|
||||
for (u32 i = 0; i < dev_menu->num_items; i++)
|
||||
{
|
||||
const auto& menu_item = dev_menu->items[i];
|
||||
if (menu_item.label == nullptr)
|
||||
{
|
||||
m_achievements_dev_menu->addSeparator();
|
||||
continue;
|
||||
}
|
||||
auto* ra_dev_menu_item = m_achievements_dev_menu->addAction(
|
||||
QString::fromStdString(menu_item.label), this,
|
||||
[menu_item]() { AchievementManager::GetInstance().ActivateDevMenuItem(menu_item.id); });
|
||||
ra_dev_menu_item->setEnabled(menu_item.enabled);
|
||||
// Recommended hardcode by RAIntegration.dll developer Jamiras
|
||||
ra_dev_menu_item->setCheckable(i < 2);
|
||||
ra_dev_menu_item->setChecked(menu_item.checked);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_achievements_dev_menu->menuAction()->setVisible(false);
|
||||
}
|
||||
}
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
|
||||
void MenuBar::InstallWAD()
|
||||
{
|
||||
QString wad_file = DolphinFileDialog::getOpenFileName(this, tr("Select Title to Install to NAND"),
|
||||
|
@ -44,6 +44,9 @@ public:
|
||||
explicit MenuBar(QWidget* parent = nullptr);
|
||||
|
||||
void UpdateToolsMenu(Core::State state);
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
void UpdateAchievementDevelopmentMenu();
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
|
||||
QMenu* GetListColumnsMenu() const { return m_cols_menu; }
|
||||
|
||||
@ -205,6 +208,10 @@ private:
|
||||
QAction* m_wad_install_action;
|
||||
QMenu* m_perform_online_update_menu;
|
||||
QAction* m_perform_online_update_for_current_region;
|
||||
QAction* m_achievements_action;
|
||||
#ifdef RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
QMenu* m_achievements_dev_menu;
|
||||
#endif // RC_CLIENT_SUPPORTS_RAINTEGRATION
|
||||
QAction* m_ntscj_ipl;
|
||||
QAction* m_ntscu_ipl;
|
||||
QAction* m_pal_ipl;
|
||||
|
@ -222,7 +222,6 @@ signals:
|
||||
void SDCardInsertionChanged(bool inserted);
|
||||
void USBKeyboardConnectionChanged(bool connected);
|
||||
void EnableGfxModsChanged(bool enabled);
|
||||
void HardcoreStateChanged();
|
||||
|
||||
private:
|
||||
Settings();
|
||||
|
Reference in New Issue
Block a user