miroir de https://git.suyu.dev/suyu/suyu.git
95 lignes
2.2 KiB
Kotlin
95 lignes
2.2 KiB
Kotlin
// SPDX-FileCopyrightText: 2023 yuzu Emulator Project
|
|
// SPDX-FileCopyrightText: 2024 suyu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
package dev.suyu.suyu_emu.features.input
|
|
|
|
import android.view.InputDevice
|
|
import androidx.annotation.Keep
|
|
import dev.suyu.suyu_emu.SuyuApplication
|
|
import dev.suyu.suyu_emu.R
|
|
import dev.suyu.suyu_emu.utils.InputHandler.getGUID
|
|
|
|
@Keep
|
|
interface SuyuInputDevice {
|
|
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 SuyuPhysicalDevice(
|
|
private val device: InputDevice,
|
|
private val port: Int,
|
|
useSystemVibrator: Boolean
|
|
) : SuyuInputDevice {
|
|
private val vibrator = if (useSystemVibrator) {
|
|
SuyuVibrator.getSystemVibrator()
|
|
} else {
|
|
SuyuVibrator.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 SuyuInputOverlayDevice(
|
|
private val vibration: Boolean,
|
|
private val port: Int
|
|
) : SuyuInputDevice {
|
|
private val vibrator = SuyuVibrator.getSystemVibrator()
|
|
|
|
override fun getName(): String {
|
|
return SuyuApplication.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)
|
|
}
|
|
}
|
|
}
|