mirror of https://github.com/yuzu-emu/yuzu.git
94 lines
2.2 KiB
Kotlin
94 lines
2.2 KiB
Kotlin
// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
package org.yuzu.yuzu_emu.features.input
|
|
|
|
import android.view.InputDevice
|
|
import androidx.annotation.Keep
|
|
import org.yuzu.yuzu_emu.YuzuApplication
|
|
import org.yuzu.yuzu_emu.R
|
|
import org.yuzu.yuzu_emu.utils.InputHandler.getGUID
|
|
|
|
@Keep
|
|
interface YuzuInputDevice {
|
|
fun getName(): String
|
|
|
|
fun getGUID(): String
|
|
|
|
fun getPort(): Int
|
|
|
|
fun getSupportsVibration(): Boolean
|
|
|
|
fun vibrate(intensity: Float)
|
|
|
|
fun getAxes(): Array<Int> = arrayOf()
|
|
fun hasKeys(keys: IntArray): BooleanArray = BooleanArray(0)
|
|
}
|
|
|
|
class YuzuPhysicalDevice(
|
|
private val device: InputDevice,
|
|
private val port: Int,
|
|
useSystemVibrator: Boolean
|
|
) : YuzuInputDevice {
|
|
private val vibrator = if (useSystemVibrator) {
|
|
YuzuVibrator.getSystemVibrator()
|
|
} else {
|
|
YuzuVibrator.getControllerVibrator(device)
|
|
}
|
|
|
|
override fun getName(): String {
|
|
return device.name
|
|
}
|
|
|
|
override fun getGUID(): String {
|
|
return device.getGUID()
|
|
}
|
|
|
|
override fun getPort(): Int {
|
|
return port
|
|
}
|
|
|
|
override fun getSupportsVibration(): Boolean {
|
|
return vibrator.supportsVibration()
|
|
}
|
|
|
|
override fun vibrate(intensity: Float) {
|
|
vibrator.vibrate(intensity)
|
|
}
|
|
|
|
override fun getAxes(): Array<Int> = device.motionRanges.map { it.axis }.toTypedArray()
|
|
override fun hasKeys(keys: IntArray): BooleanArray = device.hasKeys(*keys)
|
|
}
|
|
|
|
class YuzuInputOverlayDevice(
|
|
private val vibration: Boolean,
|
|
private val port: Int
|
|
) : YuzuInputDevice {
|
|
private val vibrator = YuzuVibrator.getSystemVibrator()
|
|
|
|
override fun getName(): String {
|
|
return YuzuApplication.appContext.getString(R.string.input_overlay)
|
|
}
|
|
|
|
override fun getGUID(): String {
|
|
return "00000000000000000000000000000000"
|
|
}
|
|
|
|
override fun getPort(): Int {
|
|
return port
|
|
}
|
|
|
|
override fun getSupportsVibration(): Boolean {
|
|
if (vibration) {
|
|
return vibrator.supportsVibration()
|
|
}
|
|
return false
|
|
}
|
|
|
|
override fun vibrate(intensity: Float) {
|
|
if (vibration) {
|
|
vibrator.vibrate(intensity)
|
|
}
|
|
}
|
|
}
|