Add touch gliding (#1723)
* Add touch gliding * Add attributes for glidability * Account for touch glide attributes * Ditching glidabitliy arrays * Change var name to be consistent with feature name
This commit is contained in:
parent
0db164bfb2
commit
a6e497cf62
|
@ -28,6 +28,7 @@ public final class TouchscreenControllerButtonView extends View {
|
||||||
private Hotkey mHotkey = Hotkey.NONE;
|
private Hotkey mHotkey = Hotkey.NONE;
|
||||||
private String mConfigName;
|
private String mConfigName;
|
||||||
private boolean mDefaultVisibility = true;
|
private boolean mDefaultVisibility = true;
|
||||||
|
private boolean mIsGlidable = true;
|
||||||
|
|
||||||
public TouchscreenControllerButtonView(Context context) {
|
public TouchscreenControllerButtonView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -115,6 +116,9 @@ public final class TouchscreenControllerButtonView extends View {
|
||||||
mConfigName = name;
|
mConfigName = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getIsGlidable() { return mIsGlidable; }
|
||||||
|
public void setIsGlidable(boolean isGlidable) { mIsGlidable = isGlidable; }
|
||||||
|
|
||||||
public boolean getDefaultVisibility() { return mDefaultVisibility; }
|
public boolean getDefaultVisibility() { return mDefaultVisibility; }
|
||||||
public void setDefaultVisibility(boolean visibility) { mDefaultVisibility = visibility; }
|
public void setDefaultVisibility(boolean visibility) { mDefaultVisibility = visibility; }
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@ import androidx.constraintlayout.widget.ConstraintLayout;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: document your custom view class.
|
* TODO: document your custom view class.
|
||||||
|
@ -42,6 +44,7 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
private float mMovingLastY = 0.0f;
|
private float mMovingLastY = 0.0f;
|
||||||
private ConstraintLayout mEditLayout = null;
|
private ConstraintLayout mEditLayout = null;
|
||||||
private int mOpacity = 100;
|
private int mOpacity = 100;
|
||||||
|
private Map<Integer, View> mGlidePairs = new HashMap<>();
|
||||||
|
|
||||||
public TouchscreenControllerView(Context context) {
|
public TouchscreenControllerView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
|
@ -229,20 +232,20 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
|
||||||
linkButton(mMainView, R.id.controller_button_up, "UpButton", "Up", true);
|
linkButton(mMainView, R.id.controller_button_up, "UpButton", "Up", true, false);
|
||||||
linkButton(mMainView, R.id.controller_button_right, "RightButton", "Right", true);
|
linkButton(mMainView, R.id.controller_button_right, "RightButton", "Right", true, false);
|
||||||
linkButton(mMainView, R.id.controller_button_down, "DownButton", "Down", true);
|
linkButton(mMainView, R.id.controller_button_down, "DownButton", "Down", true, false);
|
||||||
linkButton(mMainView, R.id.controller_button_left, "LeftButton", "Left", true);
|
linkButton(mMainView, R.id.controller_button_left, "LeftButton", "Left", true, false);
|
||||||
linkButton(mMainView, R.id.controller_button_l1, "L1Button", "L1", true);
|
linkButton(mMainView, R.id.controller_button_l1, "L1Button", "L1", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_l2, "L2Button", "L2", true);
|
linkButton(mMainView, R.id.controller_button_l2, "L2Button", "L2", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_select, "SelectButton", "Select", true);
|
linkButton(mMainView, R.id.controller_button_select, "SelectButton", "Select", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_start, "StartButton", "Start", true);
|
linkButton(mMainView, R.id.controller_button_start, "StartButton", "Start", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_triangle, "TriangleButton", "Triangle", true);
|
linkButton(mMainView, R.id.controller_button_triangle, "TriangleButton", "Triangle", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_circle, "CircleButton", "Circle", true);
|
linkButton(mMainView, R.id.controller_button_circle, "CircleButton", "Circle", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_cross, "CrossButton", "Cross", true);
|
linkButton(mMainView, R.id.controller_button_cross, "CrossButton", "Cross", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_square, "SquareButton", "Square", true);
|
linkButton(mMainView, R.id.controller_button_square, "SquareButton", "Square", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_r1, "R1Button", "R1", true);
|
linkButton(mMainView, R.id.controller_button_r1, "R1Button", "R1", true, true);
|
||||||
linkButton(mMainView, R.id.controller_button_r2, "R2Button", "R2", true);
|
linkButton(mMainView, R.id.controller_button_r2, "R2Button", "R2", true, true);
|
||||||
|
|
||||||
if (!linkAxis(mMainView, R.id.controller_axis_left, "LeftAxis", "Left", true))
|
if (!linkAxis(mMainView, R.id.controller_axis_left, "LeftAxis", "Left", true))
|
||||||
linkAxisToButtons(mMainView, R.id.controller_axis_left, "LeftAxis", "");
|
linkAxisToButtons(mMainView, R.id.controller_axis_left, "LeftAxis", "");
|
||||||
|
@ -259,13 +262,14 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
requestLayout();
|
requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void linkButton(View view, int id, String configName, String buttonName, boolean defaultVisibility) {
|
private void linkButton(View view, int id, String configName, String buttonName, boolean defaultVisibility, boolean isGlidable) {
|
||||||
TouchscreenControllerButtonView buttonView = (TouchscreenControllerButtonView) view.findViewById(id);
|
TouchscreenControllerButtonView buttonView = (TouchscreenControllerButtonView) view.findViewById(id);
|
||||||
if (buttonView == null)
|
if (buttonView == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
buttonView.setConfigName(configName);
|
buttonView.setConfigName(configName);
|
||||||
buttonView.setDefaultVisibility(defaultVisibility);
|
buttonView.setDefaultVisibility(defaultVisibility);
|
||||||
|
buttonView.setIsGlidable(isGlidable);
|
||||||
mButtonViews.add(buttonView);
|
mButtonViews.add(buttonView);
|
||||||
|
|
||||||
int code = AndroidHostInterface.getControllerButtonCode(mControllerType, buttonName);
|
int code = AndroidHostInterface.getControllerButtonCode(mControllerType, buttonName);
|
||||||
|
@ -442,6 +446,8 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
if (!AndroidHostInterface.hasInstanceAndEmulationThreadIsRunning())
|
if (!AndroidHostInterface.hasInstanceAndEmulationThreadIsRunning())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
mGlidePairs.clear();
|
||||||
|
|
||||||
for (TouchscreenControllerButtonView buttonView : mButtonViews) {
|
for (TouchscreenControllerButtonView buttonView : mButtonViews) {
|
||||||
buttonView.setPressed(false);
|
buttonView.setPressed(false);
|
||||||
}
|
}
|
||||||
|
@ -455,7 +461,13 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
|
|
||||||
case MotionEvent.ACTION_DOWN:
|
case MotionEvent.ACTION_DOWN:
|
||||||
case MotionEvent.ACTION_POINTER_DOWN:
|
case MotionEvent.ACTION_POINTER_DOWN:
|
||||||
case MotionEvent.ACTION_POINTER_UP:
|
case MotionEvent.ACTION_POINTER_UP: {
|
||||||
|
int pointerID = event.getPointerId(event.getActionIndex());
|
||||||
|
if (mGlidePairs.containsKey(pointerID))
|
||||||
|
mGlidePairs.remove(pointerID);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
case MotionEvent.ACTION_MOVE: {
|
case MotionEvent.ACTION_MOVE: {
|
||||||
if (!AndroidHostInterface.hasInstanceAndEmulationThreadIsRunning())
|
if (!AndroidHostInterface.hasInstanceAndEmulationThreadIsRunning())
|
||||||
return false;
|
return false;
|
||||||
|
@ -477,12 +489,17 @@ public class TouchscreenControllerView extends FrameLayout {
|
||||||
final int y = (int) event.getY(i);
|
final int y = (int) event.getY(i);
|
||||||
if (rect.contains(x, y)) {
|
if (rect.contains(x, y)) {
|
||||||
buttonView.setPressed(true);
|
buttonView.setPressed(true);
|
||||||
|
int pointerID = event.getPointerId(i);
|
||||||
|
if (!mGlidePairs.containsKey(pointerID) && !mGlidePairs.containsValue(buttonView)) {
|
||||||
|
if (buttonView.getIsGlidable())
|
||||||
|
mGlidePairs.put(pointerID, buttonView);
|
||||||
|
}
|
||||||
pressed = true;
|
pressed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pressed)
|
if (!pressed && !mGlidePairs.containsValue(buttonView))
|
||||||
buttonView.setPressed(pressed);
|
buttonView.setPressed(pressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue