controller getaxisraw, calibration on startup

This commit is contained in:
minjaesong
2019-04-09 23:42:10 +09:00
parent c74fd0736a
commit a4eac2173a
6 changed files with 36 additions and 21 deletions

View File

@@ -183,12 +183,6 @@ public class AppLoader implements ApplicationListener {
public static TerrarumController gamepad = null; public static TerrarumController gamepad = null;
public static float gamepadDeadzone = 0.2f; public static float gamepadDeadzone = 0.2f;
public static boolean inDeadzone(TerrarumController controller, int axis) {
float ax = controller.getAxis(axis);
float zero = (axis < 4) ? getConfigFloatArray("gamepadaxiszeropoints")[axis] : 0f;
return Math.abs(ax - zero) < gamepadDeadzone;
}
/** /**
* For the events depends on rendering frame (e.g. flicker on post-hit invincibility) * For the events depends on rendering frame (e.g. flicker on post-hit invincibility)
@@ -360,13 +354,17 @@ public class AppLoader implements ApplicationListener {
environment = RunningEnvironment.CONSOLE; environment = RunningEnvironment.CONSOLE;
// calibrate the sticks // calibrate the sticks
/*float[] axesZeroPoints = new float[]{ printdbg(this, "Calibrating the gamepad...");
gamepad.getAxis(0), float[] axesZeroPoints = new float[]{
gamepad.getAxis(1), gamepad.getAxisRaw(0),
gamepad.getAxis(2), gamepad.getAxisRaw(1),
gamepad.getAxis(3) gamepad.getAxisRaw(2),
gamepad.getAxisRaw(3)
}; };
setConfig("gamepadaxiszeropoints", axesZeroPoints);*/ setConfig("gamepadaxiszeropoints", axesZeroPoints);
for (int i = 0; i < 4; i++) {
printdbg(this, "Axis " + i + ": " + axesZeroPoints[i]);
}
} }
else { else {

View File

@@ -12,7 +12,7 @@ class GdxControllerAdapter(val c: Controller): TerrarumController {
return c.getButton(index) return c.getButton(index)
} }
override fun getAxis(index: Int): Float { override fun getAxisRaw(index: Int): Float {
return c.getAxis(index) return c.getAxis(index)
} }

View File

@@ -1,5 +1,8 @@
package net.torvald.terrarum.controller package net.torvald.terrarum.controller
import net.torvald.terrarum.AppLoader.gamepadDeadzone
import net.torvald.terrarum.AppLoader.getConfigFloatArray
/** /**
* Created by minjaesong on 2019-02-09. * Created by minjaesong on 2019-02-09.
*/ */
@@ -40,7 +43,24 @@ interface TerrarumController {
* *
* @return 0f..1f for the axis * @return 0f..1f for the axis
*/ */
fun getAxis(index: Int): Float fun getAxisRaw(index: Int): Float
/**
* Returns deadzone-applied axis value. Deadzone must be stored in the app's config database as the IntArray gamepadaxiszeropoints
*/
fun getAxis(index:Int): Float {
val raw = getAxisRaw(index)
val zero = if (index < 4) getConfigFloatArray("gamepadaxiszeropoints")[index] else 0f
val inDeadzone = Math.abs(raw - zero) < gamepadDeadzone
return if (inDeadzone) 0f else raw
}
fun inDeadzone(axis: Int): Boolean {
val ax = getAxisRaw(axis)
val zero = if (axis < 4) getConfigFloatArray("gamepadaxiszeropoints")[axis] else 0f
return Math.abs(ax - zero) < gamepadDeadzone
}
/** /**
* ``` * ```

View File

@@ -36,7 +36,7 @@ class XinputControllerAdapter(val c: XInputDevice): TerrarumController {
return false return false
} }
override fun getAxis(index: Int): Float { override fun getAxisRaw(index: Int): Float {
if (c.poll()) { if (c.poll()) {
val axes = c.components.axes val axes = c.components.axes

View File

@@ -233,12 +233,6 @@ open class ActorHumanoid(
axisRX = gamepad.getAxis(AppLoader.getConfigInt("gamepadaxisrx")) axisRX = gamepad.getAxis(AppLoader.getConfigInt("gamepadaxisrx"))
axisRY = gamepad.getAxis(AppLoader.getConfigInt("gamepadaxisry")) axisRY = gamepad.getAxis(AppLoader.getConfigInt("gamepadaxisry"))
// deadzonning
if (AppLoader.inDeadzone(gamepad, AppLoader.getConfigInt("gamepadaxislx"))) axisX = 0f
if (AppLoader.inDeadzone(gamepad, AppLoader.getConfigInt("gamepadaxisly"))) axisY = 0f
if (AppLoader.inDeadzone(gamepad, AppLoader.getConfigInt("gamepadaxisrx"))) axisRX = 0f
if (AppLoader.inDeadzone(gamepad, AppLoader.getConfigInt("gamepadaxisry"))) axisRY = 0f
isJumpDown = Gdx.input.isKeyPressed(AppLoader.getConfigInt("keyjump")) || isJumpDown = Gdx.input.isKeyPressed(AppLoader.getConfigInt("keyjump")) ||
gamepad.getButton(AppLoader.getConfigInt("gamepadltrigger")) gamepad.getButton(AppLoader.getConfigInt("gamepadltrigger"))
} }

Binary file not shown.