From 68680b7e8bd5b8dda18eb7009553b4c1979aff88 Mon Sep 17 00:00:00 2001 From: R2DLiu Date: Thu, 16 Jul 2020 17:18:14 -0400 Subject: [PATCH] hotkeys --- Externals/SlippiLib/SlippiGame.cpp | 1 - Source/Core/Common/Version.cpp | 1 + Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp | 1 - Source/Core/Core/HotkeyManager.cpp | 31 ++++++++++++++-- Source/Core/Core/HotkeyManager.h | 8 ++-- Source/Core/DolphinQt/Host.h | 5 --- Source/Core/DolphinQt/HotkeyScheduler.cpp | 39 +++++++++++++++++++- Source/Core/VideoCommon/OnScreenDisplay.cpp | 14 +++---- Source/UnitTests/StubHost.cpp | 3 ++ 9 files changed, 81 insertions(+), 22 deletions(-) diff --git a/Externals/SlippiLib/SlippiGame.cpp b/Externals/SlippiLib/SlippiGame.cpp index 4a3f48d888..b76d004970 100644 --- a/Externals/SlippiLib/SlippiGame.cpp +++ b/Externals/SlippiLib/SlippiGame.cpp @@ -452,7 +452,6 @@ namespace Slippi { break; case EVENT_FRAME_START: handleFrameStart(game.get(), payloadSize); - isProcessingComplete = false; // SLIPPITODO remove after getting on par with ishii break; case EVENT_PRE_FRAME_UPDATE: handlePreFrameUpdate(game.get(), payloadSize); diff --git a/Source/Core/Common/Version.cpp b/Source/Core/Common/Version.cpp index eb8cb7e28a..f2a4d9fbdd 100644 --- a/Source/Core/Common/Version.cpp +++ b/Source/Core/Common/Version.cpp @@ -20,6 +20,7 @@ namespace Common #define SLIPPI_REV_STR "2.1.1" +#define IS_PLAYBACK 1 const std::string scm_slippi_semver_str = SLIPPI_REV_STR; #ifdef IS_PLAYBACK diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp index 6bc4dbdfb1..6583f9d9a4 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp +++ b/Source/Core/Core/HW/EXI/EXI_DeviceSlippi.cpp @@ -29,7 +29,6 @@ #include "Core/Slippi/SlippiReplayComm.h" #include "Core/Slippi/SlippiPlayback.h" #include "Core/State.h" -#include "VideoCommon/OnScreenDisplay.h" #define FRAME_INTERVAL 900 #define SLEEP_TIME_MS 8 diff --git a/Source/Core/Core/HotkeyManager.cpp b/Source/Core/Core/HotkeyManager.cpp index 8adb34da54..b3e3608056 100644 --- a/Source/Core/Core/HotkeyManager.cpp +++ b/Source/Core/Core/HotkeyManager.cpp @@ -194,8 +194,8 @@ constexpr std::array s_hotkey_labels{{ // Slippi Playback _trans("Jump backwards in Slippi replay"), - _trans("Pause/unpause Slippi replay"), - _trans("Advance one frame in Slippi replay"), + _trans("Step backwards in Slippi replay"), + _trans("Step forwards in Slippi replay"), _trans("Jump forwards in Slippi replay"), }}; @@ -355,7 +355,7 @@ constexpr std::array s_groups_info = { {_trans("Select State"), HK_SELECT_STATE_SLOT_1, HK_SELECT_STATE_SLOT_10}, {_trans("Load Last State"), HK_LOAD_LAST_STATE_1, HK_LOAD_LAST_STATE_10}, {_trans("Other State Hotkeys"), HK_SAVE_FIRST_STATE, HK_LOAD_STATE_FILE}, - {_trans("Slippi playback controls"), HK_JUMP_BACK, HK_JUMP_FORWARD} } }; + {_trans("Slippi playback controls"), HK_SLIPPI_JUMP_BACK, HK_SLIPPI_JUMP_FORWARD} } }; HotkeyManager::HotkeyManager() { @@ -496,4 +496,29 @@ void HotkeyManager::LoadDefaults(const ControllerInterface& ciface) } set_key_expression(HK_UNDO_LOAD_STATE, NON + " & `F12`"); set_key_expression(HK_UNDO_SAVE_STATE, SHIFT + " & `F12`"); + + // Slippi Playback + // #ifdef PLAYBACK +#ifdef _WIN32 + set_key_expression(HK_SLIPPI_JUMP_BACK, SHIFT + " & `LEFT`"); + set_key_expression(HK_SLIPPI_STEP_BACK, NON + " & `LEFT`"); + set_key_expression(HK_FRAME_ADVANCE, NON + " & `PERIOD`"); + set_key_expression(HK_PLAY_PAUSE, NON + " & `SPACE`"); + set_key_expression(HK_SLIPPI_STEP_FORWARD, NON + " & `RIGHT`"); + set_key_expression(HK_SLIPPI_JUMP_FORWARD, SHIFT + " & `RIGHT`"); +#elif __APPLE__ + set_key_expression(HK_SLIPPI_JUMP_BACK, SHIFT + " & `Left Arrow`"); + set_key_expression(HK_SLIPPI_JUMP_BACK, NON + " & `Left Arrow`"); + set_key_expression(HK_FRAME_ADVANCE, NON + " & `.`"); + set_key_expression(HK_PLAY_PAUSE, NON + "& `Space`"); + set_key_expression(HK_SLIPPI_STEP_FORWARD, NON + " & `Right Arrow`"); + set_key_expression(HK_SLIPPI_JUMP_FORWARD, SHIFT + " & `Right Arrow`"); +#else + set_key_expression(HK_SLIPPI_JUMP_BACK, SHIFT + " & `Left`"); + set_key_expression(HK_SLIPPI_JUMP_BACK, NON + "Left"); + set_key_expression(HK_FRAME_ADVANCE, NON + " & `period`"); + set_key_expression(HK_PLAY_PAUSE, NON + "& `space`"); + set_key_expression(HK_SLIPPI_STEP_FORWARD, NON + " & `Right`"); + set_key_expression(HK_SLIPPI_JUMP_FORWARD, SHIFT + " & `Right`"); +#endif } diff --git a/Source/Core/Core/HotkeyManager.h b/Source/Core/Core/HotkeyManager.h index 90cb2a6e5e..b704998340 100644 --- a/Source/Core/Core/HotkeyManager.h +++ b/Source/Core/Core/HotkeyManager.h @@ -178,10 +178,10 @@ enum Hotkey HK_LOAD_STATE_FILE, // Slippi Playback - HK_JUMP_BACK, - HK_TOGGLE_PLAY_PAUSE, - HK_NEXT_FRAME, - HK_JUMP_FORWARD, + HK_SLIPPI_JUMP_BACK, + HK_SLIPPI_STEP_BACK, + HK_SLIPPI_STEP_FORWARD, + HK_SLIPPI_JUMP_FORWARD, NUM_HOTKEYS, }; diff --git a/Source/Core/DolphinQt/Host.h b/Source/Core/DolphinQt/Host.h index 2b8daee0f4..faec27984d 100644 --- a/Source/Core/DolphinQt/Host.h +++ b/Source/Core/DolphinQt/Host.h @@ -40,11 +40,6 @@ signals: void RequestLowerWindow(); void RequestExit(); void RequestSeek(); - void RequestPausePlay(); - void RequestSkipBack(); - void RequestSkipBackBig(); - void RequestSkipForward(); - void RequestSkipForwardBig(); private: Host(); diff --git a/Source/Core/DolphinQt/HotkeyScheduler.cpp b/Source/Core/DolphinQt/HotkeyScheduler.cpp index ec87f5a3fd..24f3f5ef03 100644 --- a/Source/Core/DolphinQt/HotkeyScheduler.cpp +++ b/Source/Core/DolphinQt/HotkeyScheduler.cpp @@ -24,6 +24,7 @@ #include "Core/IOS/IOS.h" #include "Core/IOS/USB/Bluetooth/BTBase.h" #include "Core/State.h" +#include "Core/Slippi/SlippiPlayback.h" #include "DolphinQt/Settings.h" @@ -36,6 +37,8 @@ #include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VideoConfig.h" +extern std::unique_ptr g_playbackStatus; + constexpr const char* DUBOIS_ALGORITHM_SHADER = "dubois"; HotkeyScheduler::HotkeyScheduler() : m_stop_requested(false) @@ -506,7 +509,41 @@ void HotkeyScheduler::Run() Config::SetCurrent(Config::GFX_ENHANCE_POST_SHADER, ""); } } - } + +#ifdef IS_PLAYBACK + // Slippi Playback + if (IsHotkey(HK_SLIPPI_JUMP_BACK)) + { + if (g_playbackStatus->targetFrameNum == INT_MAX) { + g_playbackStatus->targetFrameNum = g_playbackStatus->currentPlaybackFrame - 1200; + Host_PlaybackSeek(); + } + } + + if (IsHotkey(HK_SLIPPI_STEP_BACK)) + { + if (g_playbackStatus->targetFrameNum == INT_MAX) { + g_playbackStatus->targetFrameNum = g_playbackStatus->currentPlaybackFrame - 300; + Host_PlaybackSeek(); + } + } + + if (IsHotkey(HK_SLIPPI_STEP_FORWARD)) + { + if (g_playbackStatus->targetFrameNum == INT_MAX) { + g_playbackStatus->targetFrameNum = g_playbackStatus->currentPlaybackFrame + 300; + Host_PlaybackSeek(); + } + } + + if (IsHotkey(HK_SLIPPI_JUMP_FORWARD)) + { + if (g_playbackStatus->targetFrameNum == INT_MAX) { + g_playbackStatus->targetFrameNum = g_playbackStatus->currentPlaybackFrame + 1200; + Host_PlaybackSeek(); + } + } +#endif const auto stereo_depth = Config::Get(Config::GFX_STEREO_DEPTH); diff --git a/Source/Core/VideoCommon/OnScreenDisplay.cpp b/Source/Core/VideoCommon/OnScreenDisplay.cpp index e3fc7ce679..d55cbf4c4d 100644 --- a/Source/Core/VideoCommon/OnScreenDisplay.cpp +++ b/Source/Core/VideoCommon/OnScreenDisplay.cpp @@ -422,12 +422,12 @@ void DrawSlippiPlaybackControls() } ImGui::SetCursorPos(ImVec2(0.0f, ImGui::GetWindowHeight() - 30)); ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(0.5f, 0.45f)); - auto const paused = g_playbackStatus->shouldPause; - if (ButtonCustom(paused ? ICON_FA_PLAY : ICON_FA_PAUSE, ImVec2(40.0f, 32.0f))) { - g_playbackStatus->shouldPause = !paused; - INFO_LOG(SLIPPI, "playing"); - } - ImGui::SameLine(0.0f, 5.0f); + //auto const paused = g_playbackStatus->shouldPause; + //if (ButtonCustom(paused ? ICON_FA_PLAY : ICON_FA_PAUSE, ImVec2(40.0f, 32.0f))) { + // g_playbackStatus->shouldPause = !paused; + // INFO_LOG(SLIPPI, "playing"); + //} + //ImGui::SameLine(0.0f, 5.0f); if (ButtonCustom(ICON_FA_FAST_BACKWARD, ImVec2(32.0f, 32.0f))) { INFO_LOG(SLIPPI, "fast back"); if (g_playbackStatus->targetFrameNum == INT_MAX) { @@ -461,7 +461,7 @@ void DrawSlippiPlaybackControls() } ImGui::PopStyleVar(); ImGuiWindow* window = ImGui::GetCurrentWindow(); - ImGui::SetCursorPos(ImVec2(180.0f, window->DC.CursorPosPrevLine.y + 6.0f)); + ImGui::SetCursorPos(ImVec2(135.0f, window->DC.CursorPosPrevLine.y + 6.0f)); auto playbackTime = GetTimeForFrame(g_playbackStatus->currentPlaybackFrame); auto endTime = GetTimeForFrame(g_playbackStatus->lastFrame); diff --git a/Source/UnitTests/StubHost.cpp b/Source/UnitTests/StubHost.cpp index 1d682b0765..d623f48049 100644 --- a/Source/UnitTests/StubHost.cpp +++ b/Source/UnitTests/StubHost.cpp @@ -55,3 +55,6 @@ void Host_LowerWindow() void Host_Exit() { } +void Host_PlaybackSeek() +{ +}