[Scummvm-git-logs] scummvm master -> 554f094dd62973c9829e4521b978ab37520bac73

antoniou79 noreply at scummvm.org
Sun Aug 13 20:25:24 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
554f094dd6 ANDROID: Improvements for  controller movement detection


Commit: 554f094dd62973c9829e4521b978ab37520bac73
    https://github.com/scummvm/scummvm/commit/554f094dd62973c9829e4521b978ab37520bac73
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2023-08-13T23:25:18+03:00

Commit Message:
ANDROID: Improvements for  controller movement detection

Removed unnecessary normalization as Android already does this

Also fixed a wrong comparison in a clause for deciding to stop movement that was repeating

Changed paths:
    backends/platform/android/org/scummvm/scummvm/ScummVMEventsModern.java


diff --git a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsModern.java b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsModern.java
index 8261e692fbd..24d724e559b 100644
--- a/backends/platform/android/org/scummvm/scummvm/ScummVMEventsModern.java
+++ b/backends/platform/android/org/scummvm/scummvm/ScummVMEventsModern.java
@@ -11,10 +11,10 @@ import android.view.InputDevice;
 import androidx.annotation.NonNull;
 
 import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+//import java.util.ArrayList;
+//import java.util.Collections;
+//import java.util.Comparator;
+//import java.util.List;
 
 // A class that extends the basic ScummVMEventsBase, supporting Android APIs > HONEYCOMB_MR1 (API 12)
 public class ScummVMEventsModern extends ScummVMEventsBase {
@@ -64,10 +64,10 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 		mHandler.clear();
 	}
 
-	private ScummVMEventsModernHandler mHandler = new ScummVMEventsModernHandler(this);
-	private float[] repeatingCenteredAxisValuesArray = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
+	private final ScummVMEventsModernHandler mHandler = new ScummVMEventsModernHandler(this);
+	private final float[] repeatingCenteredAxisValuesArray = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f};
 
-	// auxilliary movement axis bitflags
+	// auxiliary movement axis bitflags
 	// Also repeated (and used) in android's events.cpp (JE_JOYSTICK case)
 	private static final int AXIS_X_bf        = 0x01; // (0x01 << 0)
 	private static final int AXIS_Y_bf        = 0x02; // (0x01 << 1)
@@ -89,18 +89,14 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 		// bounding the joystick axis center.
 		if (range != null) {
 			final float axisFlat = range.getFlat();
-			final float axisMin = range.getMin();
-			final float axisRange = range.getRange();
-
-			float axisVal = (historyPos < 0) ? event.getAxisValue( axisId, actionPointerIndex) : event.getHistoricalAxisValue( axisId, actionPointerIndex, historyPos);
-			// Normalize
-			final float value =  (axisVal - axisMin ) / axisRange * 2.0f - 1.0f;
+			final float axisVal = (historyPos < 0) ? event.getAxisValue(range.getAxis(), actionPointerIndex) : event.getHistoricalAxisValue(range.getAxis(), actionPointerIndex, historyPos);
 
 			// Ignore axis values that are within the 'flat' region of the
 			// joystick axis center.
-			if (Math.abs(value) > axisFlat) {
+			if (Math.abs(axisVal) > axisFlat) {
 //				Log.d(ScummVM.LOG_TAG, "JOYSTICK axis: " + MotionEvent.axisToString(axisId) + " id: " + axisId + " - Math.abs(" + value + ") > " + axisFlat + " (flat) - raw val=" + axisVal);
-				return value;
+				// This value is already normalized in [-1.0, 1.0] (for sticks and "hats") or [0.0, 1.0] (for triggers)
+				return axisVal;
 			}
 //			else {
 //				Log.d(ScummVM.LOG_TAG, "JOYSTICK axis: " + MotionEvent.axisToString(axisId) + " id: " + axisId + " - Math.abs(" + value + ") <= " + axisFlat  + "(flat) - raw val=" + axisVal);
@@ -171,7 +167,7 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 
 		// Calculate the distance(s) to move by - for each supported AXIS
 		// ie. the left control stick, hat switch, the right control stick, or the R/L triggers
-		// NOTE The order of entries in the moveDistanceArray array is important. It corresponds to our auxilliary movement axis bitflags values order 
+		// NOTE The order of entries in the moveDistanceArray array is important. It corresponds to our auxiliary movement axis bitflags values order
 		float[] centeredAxisValuesArray = {getCenteredAxis(event, inputDevice, MotionEvent.AXIS_X, historyPos),
 		                                   getCenteredAxis(event, inputDevice, MotionEvent.AXIS_Y, historyPos),
 		                                   getCenteredAxis(event, inputDevice, MotionEvent.AXIS_HAT_X, historyPos) * JOYSTICK_AXIS_HAT_SCALE,
@@ -192,18 +188,18 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 			currX = centeredAxisValuesArray[i];
 			absCurrX = Math.abs(currX);
 
-			// 0-6 we deal with x-axis, y-axis together for LEFT STICK, HAT (DPAD), RIGHT STICK.
+			// 0 - 5 (ie. 4+1) we deal with x-axis, y-axis together for LEFT STICK, HAT (DPAD), RIGHT STICK.
 			if (i < 5) {
 				currY = centeredAxisValuesArray[i+1];
 				absCurrY = Math.abs(currY);
 			}
-			// TODO Make this limit dependant on the ConfMan joystick_deadzone setting -- but avoid using frequenct JNI to get the value
+			// TODO Make this limit dependant on the ConfMan joystick_deadzone setting -- but avoid using frequent JNI to get the value
 			//      The virtual mouse already uses joystick_deadzone to handle input, along with the "kbdmouse_speed". (see backends/keymapper/virtual-mouse.cpp)
 			//      PSP also uses joystick_deadzone for its input so maybe we could do something similar. (see backends/platform/psp/input.cpp).
 			//      If this filtering goes to the native side (eg. in backends/platform/android/events.cpp) we'll still need to somehow update the repeating-axis bitflag.
 			if (absCurrX < 0.209f
-			    && (i >= 5 || absCurrY < 0.209f)) {
-				// When on all the axis for the current contol (or the only axis) we have negligible movement that could still be greater than "flat" range,
+			    && (i >= 6 || absCurrY < 0.209f)) {
+				// When on all the axis for the current control (or the only axis) we have negligible movement that could still be greater than "flat" range,
 				// we do extra filter to stop repetition in order to avoid cases when Android does not send onGenericMotionEvent()
 				// for small x or y (while abs is still greater than range.getflat())!
 				// In such case we would end up with a slow moving "mouse" cursor - so we need this extra filter.
@@ -211,7 +207,7 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 				// If previously we had movement on at least one of the axis for the current control (or the only axis),
 				// then stop movement, reset values to 0 and clear pertinent repeating axis bitflags.
 				if ((prevRepeatingAxisIdBitFlags & (0x01 <<  i)) != 0
-				    || (i >= 5 && (prevRepeatingAxisIdBitFlags & (0x01 << (i+1))) != 0)) {
+				    || (i < 5 && (prevRepeatingAxisIdBitFlags & (0x01 << (i+1))) != 0)) {
 //					if (i < 5) {
 //						Log.d(ScummVM.LOG_TAG, "JOYSTICK " + axisBitFlagIndexToString[i] + ", " + axisBitFlagIndexToString[i+1] + "- pushEvent(): STOPPED: x=" + (int)(currX * 100) + " y=" + (int)(currY * 100));
 //					} else {
@@ -219,19 +215,19 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 //					}
 					// do the move, then signal the joystick has returned to center pos
 					stoppingMovementAxisIdBitFlags = 0;
-					repeatingCenteredAxisValuesArray[i]   = currX;
-					stoppingMovementAxisIdBitFlags |= (0x01 <<  i);
+					repeatingCenteredAxisValuesArray[i] = currX;
+					stoppingMovementAxisIdBitFlags |= (0x01 << i);
 					if (i < 5) {
 						repeatingCenteredAxisValuesArray[i+1] = currY;
-						stoppingMovementAxisIdBitFlags |= (0x01 <<  (i+1));
+						stoppingMovementAxisIdBitFlags |= (0x01 << (i+1));
 					}
 					repeatMove(stoppingMovementAxisIdBitFlags, true);
 
-					repeatingCenteredAxisValuesArray[i]   = 0.0f;
-					repeatingAxisIdBitFlags &= ~(0x01 <<  i);
+					repeatingCenteredAxisValuesArray[i] = 0.0f;
+					repeatingAxisIdBitFlags &= ~(0x01 << i);
 					if (i < 5) {
 						repeatingCenteredAxisValuesArray[i+1] = 0.0f;
-						repeatingAxisIdBitFlags &= ~(0x01 <<  (i+1));
+						repeatingAxisIdBitFlags &= ~(0x01 << (i+1));
 					}
 					// This return-to-zero (center pos) is sent as an explicit extra event, so it's considered "movement" on the axis
 					repeatMove(stoppingMovementAxisIdBitFlags, true);
@@ -244,8 +240,8 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 //					Log.d(ScummVM.LOG_TAG, "JOYSTICK " + axisBitFlagIndexToString[i] + "- update movement: x= " + (int)(currX * 100));
 //				}
 				// We update the axis values (for controls like sticks or hats we update both pertinent axis values here)
-				// and set the respsective repetition bit flag(s).
-				repeatingCenteredAxisValuesArray[i]   = currX; // X AXIS
+				// and set the respective repetition bit flag(s).
+				repeatingCenteredAxisValuesArray[i] = currX; // X AXIS
 				repeatingAxisIdBitFlags |= (0x01 <<  i);
 				if (i < 5) {
 					repeatingCenteredAxisValuesArray[i+1] = currY; // Y AXIS
@@ -274,7 +270,7 @@ public class ScummVMEventsModern extends ScummVMEventsBase {
 			 || (event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0)) {
 			switch(event.getActionMasked()) {
 			case MotionEvent.ACTION_MOVE:
-				InputDevice inputDevice = event.getDevice();
+				//InputDevice inputDevice = event.getDevice();
 				//Log.d(ScummVM.LOG_TAG, "JOYSTICK GENERIC MOTION: MOVE, Devname=" + inputDevice.getName() + " pid=" + inputDevice.getProductId() + " vid=" + inputDevice.getVendorId());
 				// NOTE In Android 12 (on some early version patch) support for PS5's DualSense broke, and the key mappings are messed up.
 				// This was fixed in another Android 12 patch, but not all devices got that. (eg Redmi 9 Pro does not have this update)




More information about the Scummvm-git-logs mailing list