diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index e4cba66429..30f9f6871b 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -33,6 +33,7 @@ #include "Common/Version.h" #include "Core/ActionReplay.h" +#include "Core/Boot/Boot.h" #include "Core/Config/MainSettings.h" #include "Core/Config/NetplaySettings.h" #include "Core/Config/SessionSettings.h" @@ -1721,7 +1722,7 @@ bool NetPlayClient::StartGame(const std::string& path) } // boot game - m_dialog->BootGame(path); + m_dialog->BootGame(path, nullptr); UpdateDevices(); diff --git a/Source/Core/Core/NetPlayClient.h b/Source/Core/Core/NetPlayClient.h index 3c02cad266..4487358523 100644 --- a/Source/Core/Core/NetPlayClient.h +++ b/Source/Core/Core/NetPlayClient.h @@ -23,6 +23,8 @@ #include "Core/SyncIdentifier.h" #include "InputCommon/GCPadStatus.h" +class BootSessionData; + namespace UICommon { class GameFile; @@ -34,7 +36,8 @@ class NetPlayUI { public: virtual ~NetPlayUI() {} - virtual void BootGame(const std::string& filename) = 0; + virtual void BootGame(const std::string& filename, + std::unique_ptr boot_session_data) = 0; virtual void StopGame() = 0; virtual bool IsHosting() const = 0; diff --git a/Source/Core/DolphinQt/MainWindow.cpp b/Source/Core/DolphinQt/MainWindow.cpp index c245a41557..aacdea6a71 100644 --- a/Source/Core/DolphinQt/MainWindow.cpp +++ b/Source/Core/DolphinQt/MainWindow.cpp @@ -1372,13 +1372,15 @@ void MainWindow::NetPlayInit() { const auto& game_list_model = m_game_list->GetGameListModel(); m_netplay_setup_dialog = new NetPlaySetupDialog(game_list_model, this); - m_netplay_dialog = new NetPlayDialog(game_list_model); + m_netplay_dialog = new NetPlayDialog( + game_list_model, + [this](const std::string& path, std::unique_ptr boot_session_data) { + StartGame(path, ScanForSecondDisc::Yes, std::move(boot_session_data)); + }); #ifdef USE_DISCORD_PRESENCE m_netplay_discord = new DiscordHandler(this); #endif - connect(m_netplay_dialog, &NetPlayDialog::Boot, this, - [this](const QString& path) { StartGame(path, ScanForSecondDisc::Yes); }); connect(m_netplay_dialog, &NetPlayDialog::Stop, this, &MainWindow::ForceStop); connect(m_netplay_dialog, &NetPlayDialog::rejected, this, &MainWindow::NetPlayQuit); connect(m_netplay_setup_dialog, &NetPlaySetupDialog::Join, this, &MainWindow::NetPlayJoin); diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp index 464cb506db..7e05a51add 100644 --- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp +++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp @@ -31,6 +31,7 @@ #include "Common/Logging/Log.h" #include "Common/TraversalClient.h" +#include "Core/Boot/Boot.h" #include "Core/Config/GraphicsSettings.h" #include "Core/Config/MainSettings.h" #include "Core/Config/NetplaySettings.h" @@ -62,8 +63,10 @@ #include "VideoCommon/RenderBase.h" #include "VideoCommon/VideoConfig.h" -NetPlayDialog::NetPlayDialog(const GameListModel& game_list_model, QWidget* parent) - : QDialog(parent), m_game_list_model(game_list_model) +NetPlayDialog::NetPlayDialog(const GameListModel& game_list_model, + StartGameCallback start_game_callback, QWidget* parent) + : QDialog(parent), m_game_list_model(game_list_model), + m_start_game_callback(std::move(start_game_callback)) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); @@ -682,10 +685,11 @@ void NetPlayDialog::UpdateGUI() // NetPlayUI methods -void NetPlayDialog::BootGame(const std::string& filename) +void NetPlayDialog::BootGame(const std::string& filename, + std::unique_ptr boot_session_data) { m_got_stop_request = false; - emit Boot(QString::fromStdString(filename)); + m_start_game_callback(filename, std::move(boot_session_data)); } void NetPlayDialog::StopGame() diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h index b2753236ba..5844c25cb4 100644 --- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h +++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.h @@ -3,6 +3,10 @@ #pragma once +#include +#include +#include + #include #include @@ -11,6 +15,7 @@ #include "DolphinQt/GameList/GameListModel.h" #include "VideoCommon/OnScreenDisplay.h" +class BootSessionData; class ChunkedProgressDialog; class MD5Dialog; class PadMappingDialog; @@ -30,14 +35,19 @@ class NetPlayDialog : public QDialog, public NetPlay::NetPlayUI { Q_OBJECT public: - explicit NetPlayDialog(const GameListModel& game_list_model, QWidget* parent = nullptr); + using StartGameCallback = std::function boot_session_data)>; + + explicit NetPlayDialog(const GameListModel& game_list_model, + StartGameCallback start_game_callback, QWidget* parent = nullptr); ~NetPlayDialog(); void show(std::string nickname, bool use_traversal); void reject() override; // NetPlayUI methods - void BootGame(const std::string& filename) override; + void BootGame(const std::string& filename, + std::unique_ptr boot_session_data) override; void StopGame() override; bool IsHosting() const override; @@ -85,7 +95,6 @@ public: void HideChunkedProgressDialog() override; void SetChunkedProgress(int pid, u64 progress) override; signals: - void Boot(const QString& filename); void Stop(); private: @@ -162,4 +171,6 @@ private: int m_player_count = 0; int m_old_player_count = 0; bool m_host_input_authority = false; + + StartGameCallback m_start_game_callback; };