|
|
|
@ -369,29 +369,10 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { |
|
|
|
} |
|
|
|
|
|
|
|
for (InputOverlayDrawableButton button : overlayButtons) { |
|
|
|
// Determine the button state to apply based on the MotionEvent action flag. |
|
|
|
switch (event.getAction() & MotionEvent.ACTION_MASK) { |
|
|
|
case MotionEvent.ACTION_DOWN: |
|
|
|
case MotionEvent.ACTION_POINTER_DOWN: |
|
|
|
// If a pointer enters the bounds of a button, press that button. |
|
|
|
if (button.getBounds() |
|
|
|
.contains((int) event.getX(pointerIndex), (int) event.getY(pointerIndex))) { |
|
|
|
button.setPressedState(true); |
|
|
|
button.setTrackId(event.getPointerId(pointerIndex)); |
|
|
|
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), |
|
|
|
ButtonState.PRESSED); |
|
|
|
} |
|
|
|
break; |
|
|
|
case MotionEvent.ACTION_UP: |
|
|
|
case MotionEvent.ACTION_POINTER_UP: |
|
|
|
// If a pointer ends, release the button it was pressing. |
|
|
|
if (button.getTrackId() == event.getPointerId(pointerIndex)) { |
|
|
|
button.setPressedState(false); |
|
|
|
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), |
|
|
|
ButtonState.RELEASED); |
|
|
|
} |
|
|
|
break; |
|
|
|
if (!button.updateStatus(event)) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
NativeLibrary.onGamePadEvent(NativeLibrary.TouchScreenDevice, button.getId(), button.getStatus()); |
|
|
|
} |
|
|
|
|
|
|
|
for (InputOverlayDrawableDpad dpad : overlayDpads) { |
|
|
|
@ -516,137 +497,10 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener { |
|
|
|
} |
|
|
|
|
|
|
|
public boolean onTouchWhileEditing(MotionEvent event) { |
|
|
|
int pointerIndex = event.getActionIndex(); |
|
|
|
int fingerPositionX = (int) event.getX(pointerIndex); |
|
|
|
int fingerPositionY = (int) event.getY(pointerIndex); |
|
|
|
|
|
|
|
String orientation = |
|
|
|
getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ? |
|
|
|
"-Portrait" : ""; |
|
|
|
|
|
|
|
// Maybe combine Button and Joystick as subclasses of the same parent? |
|
|
|
// Or maybe create an interface like IMoveableHUDControl? |
|
|
|
|
|
|
|
for (InputOverlayDrawableButton button : overlayButtons) { |
|
|
|
// Determine the button state to apply based on the MotionEvent action flag. |
|
|
|
switch (event.getAction() & MotionEvent.ACTION_MASK) { |
|
|
|
case MotionEvent.ACTION_DOWN: |
|
|
|
case MotionEvent.ACTION_POINTER_DOWN: |
|
|
|
// If no button is being moved now, remember the currently touched button to move. |
|
|
|
if (mButtonBeingConfigured == null && |
|
|
|
button.getBounds().contains(fingerPositionX, fingerPositionY)) { |
|
|
|
mButtonBeingConfigured = button; |
|
|
|
mButtonBeingConfigured.onConfigureTouch(event); |
|
|
|
} |
|
|
|
break; |
|
|
|
case MotionEvent.ACTION_MOVE: |
|
|
|
if (mButtonBeingConfigured != null) { |
|
|
|
mButtonBeingConfigured.onConfigureTouch(event); |
|
|
|
invalidate(); |
|
|
|
return true; |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
case MotionEvent.ACTION_UP: |
|
|
|
case MotionEvent.ACTION_POINTER_UP: |
|
|
|
if (mButtonBeingConfigured == button) { |
|
|
|
// Persist button position by saving new place. |
|
|
|
saveControlPosition(mButtonBeingConfigured.getId(), |
|
|
|
mButtonBeingConfigured.getBounds().left, |
|
|
|
mButtonBeingConfigured.getBounds().top, orientation); |
|
|
|
mButtonBeingConfigured = null; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (InputOverlayDrawableDpad dpad : overlayDpads) { |
|
|
|
// Determine the button state to apply based on the MotionEvent action flag. |
|
|
|
switch (event.getAction() & MotionEvent.ACTION_MASK) { |
|
|
|
case MotionEvent.ACTION_DOWN: |
|
|
|
case MotionEvent.ACTION_POINTER_DOWN: |
|
|
|
// If no button is being moved now, remember the currently touched button to move. |
|
|
|
if (mButtonBeingConfigured == null && |
|
|
|
dpad.getBounds().contains(fingerPositionX, fingerPositionY)) { |
|
|
|
mDpadBeingConfigured = dpad; |
|
|
|
mDpadBeingConfigured.onConfigureTouch(event); |
|
|
|
} |
|
|
|
break; |
|
|
|
case MotionEvent.ACTION_MOVE: |
|
|
|
if (mDpadBeingConfigured != null) { |
|
|
|
mDpadBeingConfigured.onConfigureTouch(event); |
|
|
|
invalidate(); |
|
|
|
return true; |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
case MotionEvent.ACTION_UP: |
|
|
|
case MotionEvent.ACTION_POINTER_UP: |
|
|
|
if (mDpadBeingConfigured == dpad) { |
|
|
|
// Persist button position by saving new place. |
|
|
|
saveControlPosition(mDpadBeingConfigured.getId(0), |
|
|
|
mDpadBeingConfigured.getBounds().left, mDpadBeingConfigured.getBounds().top, |
|
|
|
orientation); |
|
|
|
mDpadBeingConfigured = null; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (InputOverlayDrawableJoystick joystick : overlayJoysticks) { |
|
|
|
switch (event.getAction()) { |
|
|
|
case MotionEvent.ACTION_DOWN: |
|
|
|
case MotionEvent.ACTION_POINTER_DOWN: |
|
|
|
if (mJoystickBeingConfigured == null && |
|
|
|
joystick.getBounds().contains(fingerPositionX, fingerPositionY)) { |
|
|
|
mJoystickBeingConfigured = joystick; |
|
|
|
mJoystickBeingConfigured.onConfigureTouch(event); |
|
|
|
} |
|
|
|
break; |
|
|
|
case MotionEvent.ACTION_MOVE: |
|
|
|
if (mJoystickBeingConfigured != null) { |
|
|
|
mJoystickBeingConfigured.onConfigureTouch(event); |
|
|
|
invalidate(); |
|
|
|
} |
|
|
|
break; |
|
|
|
case MotionEvent.ACTION_UP: |
|
|
|
case MotionEvent.ACTION_POINTER_UP: |
|
|
|
if (mJoystickBeingConfigured != null) { |
|
|
|
saveControlPosition(mJoystickBeingConfigured.getId(), |
|
|
|
mJoystickBeingConfigured.getBounds().left, |
|
|
|
mJoystickBeingConfigured.getBounds().top, orientation); |
|
|
|
mJoystickBeingConfigured = null; |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: Reimplement this |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
private void setDpadState(InputOverlayDrawableDpad dpad, boolean up, boolean down, boolean left, |
|
|
|
boolean right) { |
|
|
|
if (up) { |
|
|
|
if (left) |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_LEFT); |
|
|
|
else if (right) |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP_RIGHT); |
|
|
|
else |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_UP); |
|
|
|
} else if (down) { |
|
|
|
if (left) |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_LEFT); |
|
|
|
else if (right) |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN_RIGHT); |
|
|
|
else |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_DOWN); |
|
|
|
} else if (left) { |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_LEFT); |
|
|
|
} else if (right) { |
|
|
|
dpad.setState(InputOverlayDrawableDpad.STATE_PRESSED_RIGHT); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void addOverlayControls(String orientation) { |
|
|
|
if (mPreferences.getBoolean("buttonToggle0", true)) { |
|
|
|
overlayButtons.add(initializeOverlayButton(getContext(), R.drawable.button_a, |
|
|
|
|