mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-18 00:59:35 -04:00
Adapted the double tap for ALL pointers
This commit is contained in:
parent
eec850dfcc
commit
c0f9d73208
@ -97,7 +97,7 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
private ScrollView contentScroll;
|
private ScrollView contentScroll;
|
||||||
private ToggleButton toggleLog;
|
private ToggleButton toggleLog;
|
||||||
private GestureDetector gestureDetector;
|
private GestureDetector gestureDetector;
|
||||||
private GestureDetector doubleTapDetector;
|
private DoubleTapDetector doubleTapDetector;
|
||||||
|
|
||||||
private TextView debugText;
|
private TextView debugText;
|
||||||
private NavigationView.OnNavigationItemSelectedListener gameActionListener;
|
private NavigationView.OnNavigationItemSelectedListener gameActionListener;
|
||||||
@ -165,7 +165,7 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
|
|
||||||
|
|
||||||
gestureDetector = new GestureDetector(this, new SingleTapConfirm());
|
gestureDetector = new GestureDetector(this, new SingleTapConfirm());
|
||||||
doubleTapDetector = new GestureDetector(this, new DoubleTapConfirm());
|
doubleTapDetector = new DoubleTapDetector();
|
||||||
|
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
@ -317,6 +317,9 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
glTouchListener = new OnTouchListener(){
|
glTouchListener = new OnTouchListener(){
|
||||||
private boolean isTouchInHotbar = false;
|
private boolean isTouchInHotbar = false;
|
||||||
private int lastHotbarKey = -1;
|
private int lastHotbarKey = -1;
|
||||||
|
/*
|
||||||
|
* Tells if a double tap happened [MOUSE GRAB ONLY]. Doesn't tell where though.
|
||||||
|
*/
|
||||||
private boolean hasDoubleTapped = false;
|
private boolean hasDoubleTapped = false;
|
||||||
/*
|
/*
|
||||||
* Events can start with only a move instead of an pointerDown
|
* Events can start with only a move instead of an pointerDown
|
||||||
@ -425,7 +428,15 @@ public class BaseMainActivity extends LoggableActivity {
|
|||||||
scrollInitialY = CallbackBridge.mouseY;
|
scrollInitialY = CallbackBridge.mouseY;
|
||||||
//Checking if we are pressing the hotbar to select the item
|
//Checking if we are pressing the hotbar to select the item
|
||||||
hudKeyHandled = handleGuiBar((int)e.getX(e.getPointerCount()-1), (int) e.getY(e.getPointerCount()-1));
|
hudKeyHandled = handleGuiBar((int)e.getX(e.getPointerCount()-1), (int) e.getY(e.getPointerCount()-1));
|
||||||
if(hudKeyHandled != -1) sendKeyPress(hudKeyHandled);
|
if(hudKeyHandled != -1){
|
||||||
|
sendKeyPress(hudKeyHandled);
|
||||||
|
if(hasDoubleTapped && hudKeyHandled == lastHotbarKey){
|
||||||
|
//Prevent double tapping Event on two different slots
|
||||||
|
sendKeyPress(LWJGLGLFWKeycode.GLFW_KEY_F);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastHotbarKey = hudKeyHandled;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
package net.kdt.pojavlaunch;
|
|
||||||
|
|
||||||
import android.view.GestureDetector;
|
|
||||||
import android.view.GestureDetector.*;
|
|
||||||
import android.view.MotionEvent;
|
|
||||||
|
|
||||||
public class DoubleTapConfirm extends SimpleOnGestureListener {
|
|
||||||
@Override
|
|
||||||
public boolean onDoubleTap(MotionEvent e) {return true;}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onDoubleTapEvent(MotionEvent e) {return false;}
|
|
||||||
}
|
|
@ -0,0 +1,67 @@
|
|||||||
|
package net.kdt.pojavlaunch;
|
||||||
|
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
|
import static android.view.MotionEvent.ACTION_DOWN;
|
||||||
|
import static android.view.MotionEvent.ACTION_POINTER_DOWN;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class aiming at better detecting double tap events for EVERY POINTER
|
||||||
|
* Only uses the least amount of events possible,
|
||||||
|
* since we aren't guaranteed to have all events in order
|
||||||
|
*/
|
||||||
|
public class DoubleTapDetector {
|
||||||
|
|
||||||
|
private final static int DOUBLE_TAP_MIN_DELTA_MS = 50;
|
||||||
|
private final static int DOUBLE_TAP_MAX_DELTA_MS = 300;
|
||||||
|
private final static int DOUBLE_TAP_SLOP_SQUARE_PX = (int) Math.pow(Tools.dpToPx(100), 2);
|
||||||
|
|
||||||
|
private long mLastEventTime = 0;
|
||||||
|
private float mLastX = 9999;
|
||||||
|
private float mLastY = 9999;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A function to call when you have a touch event.
|
||||||
|
* @param e The MotionEvent to inspect
|
||||||
|
* @return whether or not a double tap happened for a pointer
|
||||||
|
*/
|
||||||
|
public boolean onTouchEvent(MotionEvent e){
|
||||||
|
int eventAction = e.getActionMasked();
|
||||||
|
int pointerIndex;
|
||||||
|
|
||||||
|
//Get the pointer index we want to look at
|
||||||
|
if(eventAction == ACTION_DOWN) pointerIndex = 0;
|
||||||
|
else if(eventAction == ACTION_POINTER_DOWN) pointerIndex = e.getActionIndex();
|
||||||
|
else return false;
|
||||||
|
|
||||||
|
float eventX = e.getX(pointerIndex);
|
||||||
|
float eventY = e.getY(pointerIndex);
|
||||||
|
long eventTime = e.getEventTime();
|
||||||
|
|
||||||
|
long deltaTime = eventTime - mLastEventTime;
|
||||||
|
if(deltaTime > DOUBLE_TAP_MIN_DELTA_MS && deltaTime < DOUBLE_TAP_MAX_DELTA_MS){
|
||||||
|
int deltaX = (int) mLastX - (int) eventX;
|
||||||
|
int deltaY = (int) mLastY - (int) eventY;
|
||||||
|
if((deltaX*deltaX + deltaY*deltaY) < DOUBLE_TAP_SLOP_SQUARE_PX){
|
||||||
|
//Then I guess there is a double tap :thonk:
|
||||||
|
resetDoubleTapState();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mLastEventTime = eventTime;
|
||||||
|
mLastX = eventX;
|
||||||
|
mLastY = eventY;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the double tap values.
|
||||||
|
*/
|
||||||
|
private void resetDoubleTapState(){
|
||||||
|
mLastEventTime = 0;
|
||||||
|
mLastX = 9999;
|
||||||
|
mLastY = 9999;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user