From 01a089d1f4410089cf5d183671769559039d08c8 Mon Sep 17 00:00:00 2001 From: somewhatlurker <52014015+somewhatlurker@users.noreply.github.com> Date: Wed, 23 Oct 2019 07:32:19 +1100 Subject: [PATCH] pause: add slider input filtering --- .../source/plugins/TLAC/Components/Pause.cpp | 17 ++++++++++------- .../source/plugins/TLAC/Components/Pause.h | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/source-code/source/plugins/TLAC/Components/Pause.cpp b/source-code/source/plugins/TLAC/Components/Pause.cpp index 5540e44..68b4e98 100644 --- a/source-code/source/plugins/TLAC/Components/Pause.cpp +++ b/source-code/source/plugins/TLAC/Components/Pause.cpp @@ -24,8 +24,9 @@ namespace TLAC::Components uint8_t* Pause::framespeedPatchAddress = (uint8_t*)0x140192D50; std::vector Pause::streamPlayStates; bool(*divaGiveUpFunc)(void*) = (bool(*)(void* cls))GIVEUP_FUNC_ADDRESS; - InputState* Pause::inputState; PlayerData* Pause::playerData; + InputState* Pause::inputState; + TouchSliderState* Pause::sliderState; JvsButtons Pause::filteredButtons; std::vector Pause::menu = { { @@ -73,6 +74,7 @@ namespace TLAC::Components { inputState = (InputState*)(*(uint64_t*)INPUT_STATE_PTR_ADDRESS); playerData = (PlayerData*)PLAYER_DATA_ADDRESS; + sliderState = (TouchSliderState*)SLIDER_CTRL_TASK_ADDRESS; saveOldPatchOps(); @@ -101,7 +103,7 @@ namespace TLAC::Components InjectCode(framespeedPatchAddress, { 0x0f, 0x57, 0xc0, 0xc3 }); // XORPS XMM0,XMM0; RET uint64_t audioMixerAddr = *(uint64_t*)(AUDIO_MAIN_CLASS_ADDRESS + 0x70); - uint64_t audioStreamsAddress = *(uint64_t*)(audioMixerAddr + 0x18);; + uint64_t audioStreamsAddress = *(uint64_t*)(audioMixerAddr + 0x18); int nAudioStreams = *(uint64_t*)(audioMixerAddr + 0x20); for (int i = 0; i < nAudioStreams; i++) { @@ -180,6 +182,11 @@ namespace TLAC::Components } } } + + // no slider while paused + // this is simpler than buttons because slider doesn't trigger on press, it triggers on movement + // (therefore per-button blocking isn't needed) + sliderState->ResetSensors(); } else { @@ -222,14 +229,12 @@ namespace TLAC::Components } } - // swallow filtered button inputs inputState->Tapped.Buttons = (JvsButtons)(inputState->Tapped.Buttons & ~filteredButtons); inputState->DoubleTapped.Buttons = (JvsButtons)(inputState->DoubleTapped.Buttons & ~filteredButtons); inputState->Down.Buttons = (JvsButtons)(inputState->Down.Buttons & ~filteredButtons); inputState->Released.Buttons = (JvsButtons)(inputState->Released.Buttons & ~filteredButtons); inputState->IntervalTapped.Buttons = (JvsButtons)(inputState->IntervalTapped.Buttons & ~filteredButtons); - // todo: slider } void Pause::UpdateDraw2D() @@ -297,8 +302,6 @@ namespace TLAC::Components for (int i = 0; i < menu[curMenuSet].items.size(); i++) { - menuItem &item = menu[curMenuSet].items[i]; - if (i == curMenuPos) { uint8_t alpha = (cosf(getMenuAnimPos() * 6.283185f) * 0.15 + 0.85) * 255; @@ -310,7 +313,7 @@ namespace TLAC::Components } dtParams.currentLoc = dtParams.originLoc; - drawText(&dtParams, (drawTextFlags)(DRAWTEXT_ALIGN_CENTRE), item.name); + drawText(&dtParams, (drawTextFlags)(DRAWTEXT_ALIGN_CENTRE), menu[curMenuSet].items[i].name); dtParams.originLoc.y += menuItemHeight; } diff --git a/source-code/source/plugins/TLAC/Components/Pause.h b/source-code/source/plugins/TLAC/Components/Pause.h index 9649af2..6f0d9b2 100644 --- a/source-code/source/plugins/TLAC/Components/Pause.h +++ b/source-code/source/plugins/TLAC/Components/Pause.h @@ -3,6 +3,7 @@ #include "EmulatorComponent.h" #include "PlayerData.h" #include "Input/InputState.h" +#include "Input/TouchSliderState.h" #include #include #include @@ -46,6 +47,7 @@ namespace TLAC::Components static PlayerData* playerData; static InputState* inputState; + static TouchSliderState* sliderState; static const JvsButtons allButtons = (JvsButtons)(JVS_START | JVS_TRIANGLE | JVS_SQUARE | JVS_CROSS | JVS_CIRCLE | JVS_L | JVS_R); // deliberately only has control panel buttons static JvsButtons filteredButtons;