diff --git a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
index f23147dd8..232a7fe60 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/activities/EmulationActivity.kt
@@ -338,6 +338,7 @@ class EmulationActivity : AppCompatActivity() {
preferences.getInt(InputBindingSetting.getInputAxisButtonKey(axis), -1)
val guestOrientation =
preferences.getInt(InputBindingSetting.getInputAxisOrientationKey(axis), -1)
+ val inverted = preferences.getBoolean(InputBindingSetting.getInputAxisInvertedKey(axis),false);
if (nextMapping == -1 || guestOrientation == -1) {
// Axis is unmapped
continue
@@ -346,6 +347,8 @@ class EmulationActivity : AppCompatActivity() {
// Skip joystick wobble
value = 0f
}
+ if (inverted) value = -value;
+
when (nextMapping) {
NativeLibrary.ButtonType.STICK_LEFT -> {
axisValuesCirclePad[guestOrientation] = value
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt
index 64827d89d..da3caef86 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/view/InputBindingSetting.kt
@@ -167,6 +167,7 @@ class InputBindingSetting(
.remove(oldKey) // Used for button mapping
.remove(oldKey + "_GuestOrientation") // Used for axis orientation
.remove(oldKey + "_GuestButton") // Used for axis button
+ .remove(oldKey + "_Inverted") // used for axis inversion
.apply()
}
}
@@ -200,7 +201,7 @@ class InputBindingSetting(
/**
* Helper function to write a gamepad axis mapping for the setting.
*/
- private fun writeAxisMapping(axis: Int, value: Int) {
+ private fun writeAxisMapping(axis: Int, value: Int, inverted: Boolean) {
// Cleanup old mapping
removeOldMapping()
@@ -208,6 +209,7 @@ class InputBindingSetting(
preferences.edit()
.putInt(getInputAxisOrientationKey(axis), if (isHorizontalOrientation()) 0 else 1)
.putInt(getInputAxisButtonKey(axis), value)
+ .putBoolean(getInputAxisInvertedKey(axis),inverted)
// Write next reverse mapping for future cleanup
.putString(reverseKey, getInputAxisKey(axis))
.apply()
@@ -251,8 +253,8 @@ class InputBindingSetting(
} else {
buttonCode
}
- writeAxisMapping(motionRange.axis, button)
- val uiString = "${device.name}: Axis ${motionRange.axis}"
+ writeAxisMapping(motionRange.axis, button, axisDir == '-')
+ val uiString = "${device.name}: Axis ${motionRange.axis}" + axisDir
value = uiString
}
@@ -307,6 +309,11 @@ class InputBindingSetting(
*/
fun getInputAxisButtonKey(axis: Int): String = "${getInputAxisKey(axis)}_GuestButton"
+ /**
+ * Helper function to get the settings key for an whether a gamepad axis is inverted.
+ */
+ fun getInputAxisInvertedKey(axis: Int): String = "${getInputAxisKey(axis)}_Inverted"
+
/**
* Helper function to get the settings key for an gamepad axis orientation.
*/
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index f60fdd0e3..36c65bea1 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -133,8 +133,8 @@
Press or move an input.
Input Binding
Press or move an input to bind it to %1$s.
- Move your joystick up or down.
- Move your joystick left or right.
+ Move your joystick down
+ Move your joystick right
A
B
SELECT