Android: Add support for GunCon
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user