diff --git a/rpcs3/Emu/GDB.cpp b/rpcs3/Emu/GDB.cpp index fb90f21a14..2b72d9f5ab 100644 --- a/rpcs3/Emu/GDB.cpp +++ b/rpcs3/Emu/GDB.cpp @@ -748,7 +748,7 @@ bool gdb_thread::cmd_vcont(gdb_cmd& cmd) ppu->state -= cpu_flag::dbg_pause; //special case if app didn't start yet (only loaded) if (!Emu.IsPaused() && !Emu.IsRunning()) { - Emu.Run(); + Emu.Run(true); } if (Emu.IsPaused()) { Emu.Resume(); diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 8a4f5d5475..c3df848675 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -638,7 +638,7 @@ bool Emulator::BootRsxCapture(const std::string& path) Emu.GetCallbacks().init_gs_render(); Emu.GetCallbacks().init_pad_handler(""); - GetCallbacks().on_run(); + GetCallbacks().on_run(false); m_state = system_state::running; g_fxo->init>("RSX Replay"sv, std::move(frame)); @@ -1080,7 +1080,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa GetCallbacks().on_ready(); vm::init(); g_fxo->init(); - Run(); + Run(false); m_force_boot = false; // Force LLVM recompiler @@ -1619,7 +1619,7 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa if ((m_force_boot || g_cfg.misc.autostart) && IsReady()) { - Run(); + Run(true); m_force_boot = false; } else if (IsPaused()) @@ -1635,15 +1635,22 @@ void Emulator::Load(const std::string& title_id, bool add_only, bool force_globa } } -void Emulator::Run() +void Emulator::Run(bool start_playtime) { if (!IsReady()) { Load(); - if(!IsReady()) return; + + if (!IsReady()) + { + return; + } } - if (IsRunning()) Stop(); + if (IsRunning()) + { + Stop(); + } if (IsPaused()) { @@ -1651,7 +1658,7 @@ void Emulator::Run() return; } - GetCallbacks().on_run(); + GetCallbacks().on_run(start_playtime); m_pause_start_time = 0; m_pause_amend_time = 0; diff --git a/rpcs3/Emu/System.h b/rpcs3/Emu/System.h index f898335e88..62d23cec9d 100644 --- a/rpcs3/Emu/System.h +++ b/rpcs3/Emu/System.h @@ -208,7 +208,7 @@ enum CellKbMappingType : s32; struct EmuCallbacks { std::function)> call_after; - std::function on_run; + std::function on_run; // (start_playtime) continuing or going ingame, so start the clock std::function on_pause; std::function on_resume; std::function on_stop; @@ -362,7 +362,7 @@ public: void SetForceBoot(bool force_boot); void Load(const std::string& title_id = "", bool add_only = false, bool force_global_config = false); - void Run(); + void Run(bool start_playtime); bool Pause(); void Resume(); void Stop(bool restart = false); diff --git a/rpcs3/headless_application.cpp b/rpcs3/headless_application.cpp index 67d003cbb8..3d822e1f05 100644 --- a/rpcs3/headless_application.cpp +++ b/rpcs3/headless_application.cpp @@ -55,7 +55,7 @@ void headless_application::InitializeCallbacks() callbacks.get_save_dialog = []() -> std::unique_ptr { return std::unique_ptr(); }; callbacks.get_trophy_notification_dialog = []() -> std::unique_ptr { return std::unique_ptr(); }; - callbacks.on_run = []() {}; + callbacks.on_run = [](bool /*start_playtime*/) {}; callbacks.on_pause = []() {}; callbacks.on_resume = []() {}; callbacks.on_stop = []() {}; diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index fb0d38bacc..4f2d384e43 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -153,7 +153,7 @@ void gs_frame::keyPressEvent(QKeyEvent *keyEvent) case Qt::Key_E: if (keyEvent->modifiers() == Qt::ControlModifier) { - if (Emu.IsReady()) { Emu.Run(); return; } + if (Emu.IsReady()) { Emu.Run(true); return; } else if (Emu.IsPaused()) { Emu.Resume(); return; } } break; diff --git a/rpcs3/rpcs3qt/gui_application.cpp b/rpcs3/rpcs3qt/gui_application.cpp index 91089a150d..299370dfc3 100644 --- a/rpcs3/rpcs3qt/gui_application.cpp +++ b/rpcs3/rpcs3qt/gui_application.cpp @@ -189,7 +189,7 @@ void gui_application::InitializeConnects() } #ifdef WITH_DISCORD_RPC - connect(this, &gui_application::OnEmulatorRun, [this]() + connect(this, &gui_application::OnEmulatorRun, [this](bool /*start_playtime*/) { // Discord Rich Presence Integration if (m_gui_settings->GetValue(gui::m_richPresence).toBool()) @@ -280,9 +280,9 @@ void gui_application::InitializeCallbacks() callbacks.get_save_dialog = []() -> std::unique_ptr { return std::make_unique(); }; callbacks.get_trophy_notification_dialog = [this]() -> std::unique_ptr { return std::make_unique(m_game_window); }; - callbacks.on_run = [=]() { OnEmulatorRun(); }; + callbacks.on_run = [=](bool start_playtime) { OnEmulatorRun(start_playtime); }; callbacks.on_pause = [=]() { OnEmulatorPause(); }; - callbacks.on_resume = [=]() { OnEmulatorResume(); }; + callbacks.on_resume = [=]() { OnEmulatorResume(true); }; callbacks.on_stop = [=]() { OnEmulatorStop(); }; callbacks.on_ready = [=]() { OnEmulatorReady(); }; @@ -303,8 +303,13 @@ void gui_application::InitializeCallbacks() Emu.SetCallbacks(std::move(callbacks)); } -void gui_application::StartPlaytime() +void gui_application::StartPlaytime(bool start_playtime = true) { + if (!start_playtime) + { + return; + } + const QString serial = qstr(Emu.GetTitleID()); if (serial.isEmpty()) { diff --git a/rpcs3/rpcs3qt/gui_application.h b/rpcs3/rpcs3qt/gui_application.h index 48aa346fca..eb0584cf73 100644 --- a/rpcs3/rpcs3qt/gui_application.h +++ b/rpcs3/rpcs3qt/gui_application.h @@ -54,7 +54,7 @@ private: void InitializeCallbacks(); void InitializeConnects(); - void StartPlaytime(); + void StartPlaytime(bool start_playtime); void StopPlaytime(); QTranslator m_translator; @@ -75,9 +75,9 @@ private Q_SLOTS: void OnEmuSettingsChange(); Q_SIGNALS: - void OnEmulatorRun(); + void OnEmulatorRun(bool start_playtime); void OnEmulatorPause(); - void OnEmulatorResume(); + void OnEmulatorResume(bool start_playtime); void OnEmulatorStop(); void OnEmulatorReady(); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index e290b50b22..22ce4482c8 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -220,7 +220,7 @@ void main_window::OnPlayOrPause() { if (Emu.IsReady()) { - Emu.Run(); + Emu.Run(true); } else if (Emu.IsPaused()) { @@ -852,7 +852,7 @@ void main_window::RepaintToolBarIcons() ui->mw_searchbar->setFixedWidth(toolBarHeight * 5); } -void main_window::OnEmuRun() +void main_window::OnEmuRun(bool /*start_playtime*/) { m_debuggerFrame->EnableButtons(true); #ifdef _WIN32 @@ -1815,7 +1815,7 @@ void main_window::keyPressEvent(QKeyEvent *keyEvent) { switch (keyEvent->key()) { - case Qt::Key_E: if (Emu.IsPaused()) Emu.Resume(); else if (Emu.IsReady()) Emu.Run(); return; + case Qt::Key_E: if (Emu.IsPaused()) Emu.Resume(); else if (Emu.IsReady()) Emu.Run(true); return; case Qt::Key_P: if (Emu.IsRunning()) Emu.Pause(); return; case Qt::Key_S: if (!Emu.IsStopped()) Emu.Stop(); return; case Qt::Key_R: if (!Emu.GetBoot().empty()) Emu.Restart(); return; diff --git a/rpcs3/rpcs3qt/main_window.h b/rpcs3/rpcs3qt/main_window.h index 567e8f9386..7de0f20d34 100644 --- a/rpcs3/rpcs3qt/main_window.h +++ b/rpcs3/rpcs3qt/main_window.h @@ -81,7 +81,7 @@ Q_SIGNALS: public Q_SLOTS: void OnEmuStop(); - void OnEmuRun(); + void OnEmuRun(bool start_playtime); void OnEmuResume(); void OnEmuPause(); void OnEmuReady();