Android: Add support for GunCon

This commit is contained in:
Connor McLaughlin
2021-04-03 14:53:34 +10:00
parent 17707525dc
commit bb21a062d8
16 changed files with 169 additions and 27 deletions

View File

@ -67,13 +67,12 @@ public class AndroidHostInterface {
public native void surfaceChanged(Surface surface, int format, int width, int height);
// TODO: Find a better place for this.
public native void setControllerType(int index, String typeName);
public native void setControllerButtonState(int index, int buttonCode, boolean pressed);
public native void setControllerAxisState(int index, int axisCode, float value);
public native void setMousePosition(int positionX, int positionY);
public static native int getControllerButtonCode(String controllerType, String buttonName);
public static native int getControllerAxisCode(String controllerType, String axisName);

View File

@ -36,6 +36,7 @@ public class TouchscreenControllerView extends FrameLayout {
private ArrayList<TouchscreenControllerButtonView> mButtonViews = new ArrayList<>();
private ArrayList<TouchscreenControllerAxisView> mAxisViews = new ArrayList<>();
private TouchscreenControllerDPadView mDPadView = null;
private int mPointerButtonCode = -1;
private boolean mHapticFeedback;
private String mLayoutOrientation;
private boolean mEditingLayout = false;
@ -223,6 +224,7 @@ public class TouchscreenControllerView extends FrameLayout {
removeAllViews();
LayoutInflater inflater = LayoutInflater.from(getContext());
String pointerButtonName = null;
switch (viewType) {
case "digital":
mMainView = inflater.inflate(R.layout.layout_touchscreen_controller_digital, this, true);
@ -236,6 +238,11 @@ public class TouchscreenControllerView extends FrameLayout {
mMainView = inflater.inflate(R.layout.layout_touchscreen_controller_analog_sticks, this, true);
break;
case "lightgun":
mMainView = inflater.inflate(R.layout.layout_touchscreen_controller_lightgun, this, true);
pointerButtonName = "Trigger";
break;
case "none":
default:
mMainView = null;
@ -276,6 +283,11 @@ public class TouchscreenControllerView extends FrameLayout {
linkHotkeyButton(mMainView, R.id.controller_button_analog, "AnalogToggle",
TouchscreenControllerButtonView.Hotkey.ANALOG_TOGGLE, false);
linkButton(mMainView, R.id.controller_button_a, "AButton", "A", true, true);
linkButton(mMainView, R.id.controller_button_b, "BButton", "B", true, true);
if (pointerButtonName != null)
linkPointer(pointerButtonName);
reloadButtonSettings();
updateOpacity();
requestLayout();
@ -371,6 +383,12 @@ public class TouchscreenControllerView extends FrameLayout {
mButtonViews.add(buttonView);
}
private boolean linkPointer(String buttonName) {
mPointerButtonCode = AndroidHostInterface.getInstance().getControllerButtonCode(mControllerType, buttonName);
Log.i("TouchscreenController", String.format("Pointer -> %s,%d", buttonName, mPointerButtonCode));
return (mPointerButtonCode >= 0);
}
private int dpToPixels(float dp) {
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics()));
}
@ -570,6 +588,18 @@ public class TouchscreenControllerView extends FrameLayout {
mDPadView.setUnpressed();
}
if (mPointerButtonCode >= 0 && pointerCount > 0) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
AndroidHostInterface.getInstance().setControllerButtonState(mControllerIndex,
mPointerButtonCode, true);
}
final int pointerId = event.getPointerId(0);
AndroidHostInterface.getInstance().setMousePosition(
(int)event.getX(pointerId),
(int)event.getY(pointerId));
}
return true;
}
@ -592,6 +622,11 @@ public class TouchscreenControllerView extends FrameLayout {
if (mDPadView != null)
mDPadView.setUnpressed();
if (mPointerButtonCode >= 0) {
AndroidHostInterface.getInstance().setControllerButtonState(
mControllerIndex, mPointerButtonCode, false);
}
return true;
}