yuzu-emu
/
yuzu-mainline
Archived
1
0
Fork 0

android: Convert ControllerMappingHelper to Kotlin

This commit is contained in:
Charles Lombardo 2023-03-11 00:35:51 -05:00 committed by bunnei
parent c02a27ebd2
commit b9f1f70688
1 changed files with 24 additions and 25 deletions

View File

@ -1,66 +1,65 @@
package org.yuzu.yuzu_emu.utils; package org.yuzu.yuzu_emu.utils
import android.view.InputDevice; import android.view.InputDevice
import android.view.KeyEvent; import android.view.KeyEvent
import android.view.MotionEvent; import android.view.MotionEvent
/** /**
* Some controllers have incorrect mappings. This class has special-case fixes for them. * Some controllers have incorrect mappings. This class has special-case fixes for them.
*/ */
public class ControllerMappingHelper { class ControllerMappingHelper {
/** /**
* Some controllers report extra button presses that can be ignored. * Some controllers report extra button presses that can be ignored.
*/ */
public boolean shouldKeyBeIgnored(InputDevice inputDevice, int keyCode) { fun shouldKeyBeIgnored(inputDevice: InputDevice, keyCode: Int): Boolean {
if (isDualShock4(inputDevice)) { return if (isDualShock4(inputDevice)) {
// The two analog triggers generate analog motion events as well as a keycode. // The two analog triggers generate analog motion events as well as a keycode.
// We always prefer to use the analog values, so throw away the button press // We always prefer to use the analog values, so throw away the button press
return keyCode == KeyEvent.KEYCODE_BUTTON_L2 || keyCode == KeyEvent.KEYCODE_BUTTON_R2; keyCode == KeyEvent.KEYCODE_BUTTON_L2 || keyCode == KeyEvent.KEYCODE_BUTTON_R2
} } else false
return false;
} }
/** /**
* Scale an axis to be zero-centered with a proper range. * Scale an axis to be zero-centered with a proper range.
*/ */
public float scaleAxis(InputDevice inputDevice, int axis, float value) { fun scaleAxis(inputDevice: InputDevice, axis: Int, value: Float): Float {
if (isDualShock4(inputDevice)) { if (isDualShock4(inputDevice)) {
// Android doesn't have correct mappings for this controller's triggers. It reports them // Android doesn't have correct mappings for this controller's triggers. It reports them
// as RX & RY, centered at -1.0, and with a range of [-1.0, 1.0] // as RX & RY, centered at -1.0, and with a range of [-1.0, 1.0]
// Scale them to properly zero-centered with a range of [0.0, 1.0]. // Scale them to properly zero-centered with a range of [0.0, 1.0].
if (axis == MotionEvent.AXIS_RX || axis == MotionEvent.AXIS_RY) { if (axis == MotionEvent.AXIS_RX || axis == MotionEvent.AXIS_RY) {
return (value + 1) / 2.0f; return (value + 1) / 2.0f
} }
} else if (isXboxOneWireless(inputDevice)) { } else if (isXboxOneWireless(inputDevice)) {
// Same as the DualShock 4, the mappings are missing. // Same as the DualShock 4, the mappings are missing.
if (axis == MotionEvent.AXIS_Z || axis == MotionEvent.AXIS_RZ) { if (axis == MotionEvent.AXIS_Z || axis == MotionEvent.AXIS_RZ) {
return (value + 1) / 2.0f; return (value + 1) / 2.0f
} }
if (axis == MotionEvent.AXIS_GENERIC_1) { if (axis == MotionEvent.AXIS_GENERIC_1) {
// This axis is stuck at ~.5. Ignore it. // This axis is stuck at ~.5. Ignore it.
return 0.0f; return 0.0f
} }
} else if (isMogaPro2Hid(inputDevice)) { } else if (isMogaPro2Hid(inputDevice)) {
// This controller has a broken axis that reports a constant value. Ignore it. // This controller has a broken axis that reports a constant value. Ignore it.
if (axis == MotionEvent.AXIS_GENERIC_1) { if (axis == MotionEvent.AXIS_GENERIC_1) {
return 0.0f; return 0.0f
} }
} }
return value; return value
} }
private boolean isDualShock4(InputDevice inputDevice) {
// Sony DualShock 4 controller // Sony DualShock 4 controller
return inputDevice.getVendorId() == 0x54c && inputDevice.getProductId() == 0x9cc; private fun isDualShock4(inputDevice: InputDevice): Boolean {
return inputDevice.vendorId == 0x54c && inputDevice.productId == 0x9cc
} }
private boolean isXboxOneWireless(InputDevice inputDevice) {
// Microsoft Xbox One controller // Microsoft Xbox One controller
return inputDevice.getVendorId() == 0x45e && inputDevice.getProductId() == 0x2e0; private fun isXboxOneWireless(inputDevice: InputDevice): Boolean {
return inputDevice.vendorId == 0x45e && inputDevice.productId == 0x2e0
} }
private boolean isMogaPro2Hid(InputDevice inputDevice) {
// Moga Pro 2 HID // Moga Pro 2 HID
return inputDevice.getVendorId() == 0x20d6 && inputDevice.getProductId() == 0x6271; private fun isMogaPro2Hid(inputDevice: InputDevice): Boolean {
return inputDevice.vendorId == 0x20d6 && inputDevice.productId == 0x6271
} }
} }