Files
Terrarum/src/net/torvald/terrarum/controller/TerrarumController.kt

93 lines
2.4 KiB
Kotlin

package net.torvald.terrarum.controller
import net.torvald.terrarum.App.gamepadDeadzone
import net.torvald.terrarum.App.getConfigDoubleArray
/**
* Created by minjaesong on 2019-02-09.
*/
interface TerrarumController {
/**
* 0, 1, 2, 3 : A B X Y
*
* 4, 5 : L/R Shoulder
*
* 6, 7 : Back Start
*
* 8, 9 : L/R Trigger
*
* 10, 11 : L/R Stick
*
* DirectInput devices may need external Index-to-button mapping (just a config file)
*
*/
fun getButton(index: Int): Boolean
/**
* 0: Left Y
*
* 1: Left X
*
* 2: Right Y
*
* 3: Right X
*
* 4: Left Trigger
*
* 5: Right Trigger
*
* DirectInput devices may need external Index-to-button mapping (just a config file).
*
* Warning: Under DirectInput, Xbox controllers' LT and RT shares the same axis #4, and thus it's impossible to read LT+RT input.
*
* @return 0f..1f for the axis
*/
fun getAxisRaw(index: Int): Float
/**
* Returns deadzone-applied axis value. Deadzone must be stored in the app's config database as the IntArray control_gamepad_axiszeropoints
*/
fun getAxis(index:Int): Float {
val raw = getAxisRaw(index)
val zero = if (index < 4) getConfigDoubleArray("control_gamepad_axiszeropoints")[index] else 0.0
val compensatedRaw = raw - zero
val inDeadzone = Math.abs(compensatedRaw) < gamepadDeadzone
return if (inDeadzone) 0f else raw//compensatedRaw // returning raw makes more sense
}
fun inDeadzone(axis: Int): Boolean {
val ax = getAxisRaw(axis)
val zero = if (axis < 4) getConfigDoubleArray("control_gamepad_axiszeropoints")[axis] else 0.0
return Math.abs(ax - zero) < gamepadDeadzone
}
/**
* ```
* 12 8 9
* 4 0 1
* 6 2 3
* ```
*/
fun getDpad(): Int
fun getName(): String
/**
* @param left left rumble motor, 0f..1f
* @param right right rumble moter, 0f..1f
*/
fun setRumble(left: Float, right: Float)
companion object {
const val POV_E = 1
const val POV_S = 2
const val POV_W = 4
const val POV_N = 8
const val POV_SE = POV_E or POV_S
const val POV_SW = POV_W or POV_S
const val POV_NW = POV_W or POV_N
const val POV_NE = POV_E or POV_N
}
}