diff --git a/assets/Locales/Root.json b/assets/Locales/Root.json index 3d23d4286..e43b6e5bc 100644 --- a/assets/Locales/Root.json +++ b/assets/Locales/Root.json @@ -575,6 +575,31 @@ "zh_TW": "停止模擬" } }, + { + "ID": "MenuBarOptionsRestartEmulation", + "Translations": { + "ar_SA": "إعادة تشغيل المحاكاة", + "de_DE": "Emulation neu starten", + "el_GR": "Επανεκκίνηση Εξομοίωσης", + "en_US": "Restart Emulation", + "es_ES": "Reiniciar Emulación", + "fr_FR": "Redémarrer l'Émulation", + "he_IL": "הפעל מחדש את האמולציה", + "it_IT": "Riavvia l'emulazione", + "ja_JP": "エミュレーションを再起動", + "ko_KR": "에뮬레이션 재시작", + "no_NO": "Start Emulering på nytt", + "pl_PL": "Uruchom ponownie emulację", + "pt_BR": "Reiniciar a Emulação", + "ru_RU": "Перезапустить", + "sv_SE": "Starta om emulering", + "th_TH": "รีสตาร์ทการจำลอง", + "tr_TR": "Emülasyonu Yeniden Başlat", + "uk_UA": "Перезапустити емуляцію", + "zh_CN": "重启模拟", + "zh_TW": "重啟模擬" + } + }, { "ID": "MenuBarOptionsSettings", "Translations": { @@ -24851,4 +24876,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 48e18a12e..d03d8399a 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -174,6 +174,7 @@ namespace Ryujinx.Ava.UI.ViewModels private string _screenshotKey = "F8"; private float _volume; private ApplicationData _currentApplicationData; + private bool _pendingRestart; private readonly AutoResetEvent _rendererWaitEvent; private int _customVSyncInterval; private int _customVSyncIntervalPercentageProxy; @@ -1250,6 +1251,12 @@ namespace Ryujinx.Ava.UI.ViewModels await LoadApplication(_currentApplicationData); } + else if (_pendingRestart) + { + _pendingRestart = false; + + await LoadApplication(_currentApplicationData); + } else { // Otherwise, clear state. @@ -1258,6 +1265,17 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public void RestartEmulation() + { + if (AppHost is null || _currentApplicationData is null) + { + return; + } + + _pendingRestart = true; + AppHost.Stop(); + } + private void Update_StatusBar(object sender, StatusUpdatedEventArgs args) { if (ShowMenuAndStatusBar && !ShowLoadProgress) diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index d5a59c181..5e41017d8 100755 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -167,6 +167,12 @@ Icon="{ext:Icon fa-solid fa-stop}" InputGesture="Escape" IsEnabled="{Binding IsGameRunning}" /> + ViewModel.AppHost?.Pause()); ResumeEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.Resume()); StopEmulationMenuItem.Command = Commands.Create(() => ViewModel.AppHost?.ShowExitPrompt().OrCompleted()); + RestartEmulationMenuItem.Command = Commands.Create(() => ViewModel.RestartEmulation()); CheatManagerMenuItem.Command = Commands.CreateSilentFail(OpenCheatManagerForCurrentApp); InstallFileTypesMenuItem.Command = Commands.Create(InstallFileTypes); UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes); diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml index b7385c9cb..39a70ba16 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml @@ -41,6 +41,7 @@ +