From 79ba676287b0dde8ddbb5054d6a13a02d9cc79c6 Mon Sep 17 00:00:00 2001 From: somewhatlurker <52014015+somewhatlurker@users.noreply.github.com> Date: Thu, 8 Aug 2019 17:07:43 +1000 Subject: [PATCH] make JVS L and R buttons from slider work with input emulator active (should fix issue #6) --- .../TLAC/Components/Input/InputEmulator.cpp | 46 +++++++++++++++++++ .../TLAC/Components/Input/InputEmulator.h | 1 + source-code/source/plugins/TLAC/Constants.h | 4 ++ 3 files changed, 51 insertions(+) diff --git a/source-code/source/plugins/TLAC/Components/Input/InputEmulator.cpp b/source-code/source/plugins/TLAC/Components/Input/InputEmulator.cpp index 555585e..3f08e43 100644 --- a/source-code/source/plugins/TLAC/Components/Input/InputEmulator.cpp +++ b/source-code/source/plugins/TLAC/Components/Input/InputEmulator.cpp @@ -125,6 +125,13 @@ namespace TLAC::Components inputState->DoubleTapped.Buttons = GetJvsButtonsState(tappedFunc); inputState->IntervalTapped.Buttons = GetJvsButtonsState(tappedFunc); + // if not interacting with L and R, use values from the slider instead + if ( ( (inputState->Tapped.Buttons | inputState->Released.Buttons | inputState->Down.Buttons) + & (JVS_L | JVS_R) ) == 0) + { + UpdateSliderLR(); + } + UpdateHoldState(); heldButtons = GetButtonFromHold(); @@ -305,4 +312,43 @@ namespace TLAC::Components inputState->SetBit(bit, keyboard->IsIntervalTapped(keycode), InputBufferType_IntervalTapped); } + + typedef uint8_t getSliderSensorFunc(void*, int); + void InputEmulator::UpdateSliderLR() + { + getSliderSensorFunc* getSliderSensorTapped = (getSliderSensorFunc*)GET_SLIDER_TAPPED_ADDRESS; + getSliderSensorFunc* getSliderSensorReleased = (getSliderSensorFunc*)GET_SLIDER_RELEASED_ADDRESS; + getSliderSensorFunc* getSliderSensorDown = (getSliderSensorFunc*)GET_SLIDER_DOWN_ADDRESS; + + if (getSliderSensorTapped((void*)SLIDER_CTRL_TASK_ADDRESS, 36)) + inputState->Tapped.Buttons |= JVS_L; + else + inputState->Tapped.Buttons &= ~JVS_L; + + if (getSliderSensorReleased((void*)SLIDER_CTRL_TASK_ADDRESS, 36)) + inputState->Released.Buttons |= JVS_L; + else + inputState->Released.Buttons &= ~JVS_L; + + if (getSliderSensorDown((void*)SLIDER_CTRL_TASK_ADDRESS, 36)) + inputState->Down.Buttons |= JVS_L; + else + inputState->Down.Buttons &= ~JVS_L; + + + if (getSliderSensorTapped((void*)SLIDER_CTRL_TASK_ADDRESS, 37)) + inputState->Tapped.Buttons |= JVS_R; + else + inputState->Tapped.Buttons &= ~JVS_R; + + if (getSliderSensorReleased((void*)SLIDER_CTRL_TASK_ADDRESS, 37)) + inputState->Released.Buttons |= JVS_R; + else + inputState->Released.Buttons &= ~JVS_R; + + if (getSliderSensorDown((void*)SLIDER_CTRL_TASK_ADDRESS, 37)) + inputState->Down.Buttons |= JVS_R; + else + inputState->Down.Buttons &= ~JVS_R; + } } \ No newline at end of file diff --git a/source-code/source/plugins/TLAC/Components/Input/InputEmulator.h b/source-code/source/plugins/TLAC/Components/Input/InputEmulator.h index dd99ed1..d962ee0 100644 --- a/source-code/source/plugins/TLAC/Components/Input/InputEmulator.h +++ b/source-code/source/plugins/TLAC/Components/Input/InputEmulator.h @@ -98,5 +98,6 @@ namespace TLAC::Components bool IsHold(); void UpdateInputBit(uint32_t bit, uint8_t keycode); + void UpdateSliderLR(); }; } diff --git a/source-code/source/plugins/TLAC/Constants.h b/source-code/source/plugins/TLAC/Constants.h index 2641721..12bbc95 100644 --- a/source-code/source/plugins/TLAC/Constants.h +++ b/source-code/source/plugins/TLAC/Constants.h @@ -78,6 +78,10 @@ constexpr uint64_t UI_HEIGHT_ADDRESS = 0x000000014CC621E8; constexpr uint64_t FB_ASPECT_RATIO = 0x0000000140FBC2E8; constexpr uint64_t UI_ASPECT_RATIO = 0x000000014CC621D0; +constexpr uint64_t GET_SLIDER_TAPPED_ADDRESS = 0x0000000140618C60; +constexpr uint64_t GET_SLIDER_RELEASED_ADDRESS = 0x0000000140618C40; +constexpr uint64_t GET_SLIDER_DOWN_ADDRESS = 0x0000000140618C20; + #define XINPUT_A 0x00 #define XINPUT_B 0x01 #define XINPUT_X 0x02