From e89c409807a03621bd1c9784382bb63c4346182c Mon Sep 17 00:00:00 2001 From: artdeell Date: Sat, 6 Apr 2024 12:22:03 -0400 Subject: [PATCH] Feat[input]: interrupt dropping when switching hotbar slots + endless dropping --- .../customcontrols/mouse/DropGesture.java | 31 ++++++++++++------- .../mouse/InGameEventProcessor.java | 5 ++- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/DropGesture.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/DropGesture.java index bfb8d677a..f51ef6b44 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/DropGesture.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/DropGesture.java @@ -5,24 +5,33 @@ import static org.lwjgl.glfw.CallbackBridge.sendKeyPress; import android.os.Handler; import net.kdt.pojavlaunch.LwjglGlfwKeycode; +import net.kdt.pojavlaunch.prefs.LauncherPreferences; + +public class DropGesture implements Runnable{ + private final Handler mHandler; + private boolean mActive; -public class DropGesture extends ValidatorGesture { public DropGesture(Handler mHandler) { - super(mHandler, 250); + this.mHandler = mHandler; } - boolean mGuiBarHit; public void submit(boolean hasGuiBarHit) { - submit(); - mGuiBarHit = hasGuiBarHit; + if(hasGuiBarHit && !mActive) { + mActive = true; + mHandler.postDelayed(this, LauncherPreferences.PREF_LONGPRESS_TRIGGER); + } + if(!hasGuiBarHit && mActive) cancel(); + } + + public void cancel() { + mActive = false; + mHandler.removeCallbacks(this); } @Override - public boolean checkAndTrigger() { - if(mGuiBarHit) sendKeyPress(LwjglGlfwKeycode.GLFW_KEY_Q); - return true; + public void run() { + if(!mActive) return; + sendKeyPress(LwjglGlfwKeycode.GLFW_KEY_Q); + mHandler.postDelayed(this, 250); } - - @Override - public void onGestureCancelled(boolean isSwitching) {} } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/InGameEventProcessor.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/InGameEventProcessor.java index daed7323b..f42afde19 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/InGameEventProcessor.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/customcontrols/mouse/InGameEventProcessor.java @@ -92,7 +92,7 @@ public class InGameEventProcessor implements TouchEventProcessor { private void cancelGestures(boolean isSwitching) { mLeftClickGesture.cancel(isSwitching); mRightClickGesture.cancel(isSwitching); - mDropGesture.cancel(isSwitching); + mDropGesture.cancel(); } private boolean handleGuiBar(MotionEvent motionEvent) { @@ -106,6 +106,9 @@ public class InGameEventProcessor implements TouchEventProcessor { boolean hasGuiBarHit = hudKeyHandled != -1; if(hasGuiBarHit && hudKeyHandled != mLastHudKey) { CallbackBridge.sendKeyPress(hudKeyHandled); + // The GUI bar is handled before the gesture will be submitted, so this + // will be resubmitted again soon (with the timer restarted) + mDropGesture.cancel(); mLastHudKey = hudKeyHandled; } return hasGuiBarHit;