diff options
author | Adam Heinermann <aheinerm@gmail.com> | 2021-11-21 17:28:47 -0800 |
---|---|---|
committer | Adam Heinermann <aheinerm@gmail.com> | 2021-11-21 17:28:47 -0800 |
commit | f90d9808378092e208b431f467c54feb6952e91d (patch) | |
tree | 12f5c7bb51e1d3fb4fb755802c23c18b5a1a9367 /src/yuzu/main.cpp | |
parent | d20f91da11fe7c5d5f1bd4f63cc3b4d221be67a4 (diff) |
Added TAS controls to the menu under Tools
Diffstat (limited to 'src/yuzu/main.cpp')
-rw-r--r-- | src/yuzu/main.cpp | 100 |
1 files changed, 71 insertions, 29 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index c4c76b094f..73278f29f9 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -965,6 +965,9 @@ void GMainWindow::InitializeHotkeys() { const QString toggle_status_bar = QStringLiteral("Toggle Status Bar"); const QString fullscreen = QStringLiteral("Fullscreen"); const QString capture_screenshot = QStringLiteral("Capture Screenshot"); + const QString tas_start_stop = QStringLiteral("TAS Start/Stop"); + const QString tas_record = QStringLiteral("TAS Record"); + const QString tas_reset = QStringLiteral("TAS Reset"); ui->action_Load_File->setShortcut(hotkey_registry.GetKeySequence(main_window, load_file)); ui->action_Load_File->setShortcutContext( @@ -1005,6 +1008,18 @@ void GMainWindow::InitializeHotkeys() { ui->action_Fullscreen->setShortcutContext( hotkey_registry.GetShortcutContext(main_window, fullscreen)); + ui->action_TAS_Start->setShortcut(hotkey_registry.GetKeySequence(main_window, tas_start_stop)); + ui->action_TAS_Start->setShortcutContext( + hotkey_registry.GetShortcutContext(main_window, tas_start_stop)); + + ui->action_TAS_Record->setShortcut(hotkey_registry.GetKeySequence(main_window, tas_record)); + ui->action_TAS_Record->setShortcutContext( + hotkey_registry.GetShortcutContext(main_window, tas_record)); + + ui->action_TAS_Reset->setShortcut(hotkey_registry.GetKeySequence(main_window, tas_reset)); + ui->action_TAS_Reset->setShortcutContext( + hotkey_registry.GetShortcutContext(main_window, tas_reset)); + connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("Load File"), this), &QShortcut::activated, this, &GMainWindow::OnMenuLoadFile); connect( @@ -1095,28 +1110,6 @@ void GMainWindow::InitializeHotkeys() { render_window->setAttribute(Qt::WA_Hover, true); } }); - connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Start/Stop"), this), - &QShortcut::activated, this, [&] { - if (!emulation_running) { - return; - } - input_subsystem->GetTas()->StartStop(); - }); - connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Reset"), this), - &QShortcut::activated, this, [&] { input_subsystem->GetTas()->Reset(); }); - connect(hotkey_registry.GetHotkey(main_window, QStringLiteral("TAS Record"), this), - &QShortcut::activated, this, [&] { - if (!emulation_running) { - return; - } - bool is_recording = input_subsystem->GetTas()->Record(); - if (!is_recording) { - const auto res = QMessageBox::question(this, tr("TAS Recording"), - tr("Overwrite file of player 1?"), - QMessageBox::Yes | QMessageBox::No); - input_subsystem->GetTas()->SaveRecording(res == QMessageBox::Yes); - } - }); } void GMainWindow::SetDefaultUIGeometry() { @@ -1236,11 +1229,11 @@ void GMainWindow::ConnectMenuEvents() { connect(ui->action_Restart, &QAction::triggered, this, [this] { BootGame(QString(game_path)); }); connect(ui->action_Configure, &QAction::triggered, this, &GMainWindow::OnConfigure); - connect(ui->action_Configure_Tas, &QAction::triggered, this, &GMainWindow::OnConfigureTas); connect(ui->action_Configure_Current_Game, &QAction::triggered, this, &GMainWindow::OnConfigurePerGame); // View + connect(ui->action_Fullscreen, &QAction::triggered, this, &GMainWindow::ToggleFullscreen); connect(ui->action_Single_Window_Mode, &QAction::triggered, this, &GMainWindow::ToggleWindowMode); connect(ui->action_Display_Dock_Widget_Headers, &QAction::triggered, this, @@ -1258,17 +1251,20 @@ void GMainWindow::ConnectMenuEvents() { ui->menu_Reset_Window_Size->addAction(ui->action_Reset_Window_Size_900); ui->menu_Reset_Window_Size->addAction(ui->action_Reset_Window_Size_1080); - // Fullscreen - connect(ui->action_Fullscreen, &QAction::triggered, this, &GMainWindow::ToggleFullscreen); - - // Movie + // Tools + connect(ui->action_Rederive, &QAction::triggered, this, + std::bind(&GMainWindow::OnReinitializeKeys, this, ReinitializeKeyBehavior::Warning)); connect(ui->action_Capture_Screenshot, &QAction::triggered, this, &GMainWindow::OnCaptureScreenshot); + // TAS + connect(ui->action_TAS_Start, &QAction::triggered, this, &GMainWindow::OnTasStartStop); + connect(ui->action_TAS_Record, &QAction::triggered, this, &GMainWindow::OnTasRecord); + connect(ui->action_TAS_Reset, &QAction::triggered, this, &GMainWindow::OnTasReset); + connect(ui->action_Configure_Tas, &QAction::triggered, this, &GMainWindow::OnConfigureTas); + // Help connect(ui->action_Open_yuzu_Folder, &QAction::triggered, this, &GMainWindow::OnOpenYuzuFolder); - connect(ui->action_Rederive, &QAction::triggered, this, - std::bind(&GMainWindow::OnReinitializeKeys, this, ReinitializeKeyBehavior::Warning)); connect(ui->action_About, &QAction::triggered, this, &GMainWindow::OnAbout); } @@ -1582,6 +1578,7 @@ void GMainWindow::ShutdownGame() { game_list->SetFilterFocus(); tas_label->clear(); input_subsystem->GetTas()->Stop(); + OnTasStateChanged(); render_window->removeEventFilter(render_window); render_window->setAttribute(Qt::WA_Hover, false); @@ -2509,6 +2506,7 @@ void GMainWindow::OnStartGame() { ui->action_Restart->setEnabled(true); ui->action_Configure_Current_Game->setEnabled(true); ui->action_Report_Compatibility->setEnabled(true); + OnTasStateChanged(); discord_rpc->Update(); ui->action_Load_Amiibo->setEnabled(true); @@ -2821,6 +2819,33 @@ void GMainWindow::OnConfigureTas() { } } +void GMainWindow::OnTasStartStop() { + if (!emulation_running) { + return; + } + input_subsystem->GetTas()->StartStop(); + OnTasStateChanged(); +} + +void GMainWindow::OnTasRecord() { + if (!emulation_running) { + return; + } + bool is_recording = input_subsystem->GetTas()->Record(); + if (!is_recording) { + const auto res = + QMessageBox::question(this, tr("TAS Recording"), tr("Overwrite file of player 1?"), + QMessageBox::Yes | QMessageBox::No); + input_subsystem->GetTas()->SaveRecording(res == QMessageBox::Yes); + } + OnTasStateChanged(); +} + +void GMainWindow::OnTasReset() { + input_subsystem->GetTas()->Reset(); +} + + void GMainWindow::OnConfigurePerGame() { const u64 title_id = system->GetCurrentProcessProgramID(); OpenPerGameConfiguration(title_id, game_path.toStdString()); @@ -3014,6 +3039,23 @@ QString GMainWindow::GetTasStateDescription() const { } } +void GMainWindow::OnTasStateChanged() { + bool is_running = false; + bool is_recording = false; + if (emulation_running) { + TasInput::TasState tas_status = std::get<0>(input_subsystem->GetTas()->GetStatus()); + is_running = tas_status == TasInput::TasState::Running; + is_recording = tas_status == TasInput::TasState::Recording; + } + + ui->action_TAS_Start->setText(is_running ? tr("&Stop Running") : tr("&Start")); + ui->action_TAS_Record->setText(is_recording ? tr("Stop R&ecording") : tr("R&ecord")); + + ui->action_TAS_Start->setEnabled(emulation_running); + ui->action_TAS_Record->setEnabled(emulation_running); + ui->action_TAS_Reset->setEnabled(emulation_running); +} + void GMainWindow::UpdateStatusBar() { if (emu_thread == nullptr) { status_bar_update_timer.stop(); |