Fix js crashing on mobile, respect deadzone and make configurable

This commit is contained in:
Terry Hearst 2023-02-11 15:53:45 -05:00
parent dc9ee0a60c
commit 5eb8e39b82
4 changed files with 18 additions and 8 deletions

View file

@ -163,7 +163,7 @@ class CameraController extends Object {
var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0) var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0)
- (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0)
- Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis); + Gamepad.getAxis(Settings.gamepadSettings.cameraYAxis);
if (Settings.gamepadSettings.invertYAxis) if (Settings.gamepadSettings.invertYAxis)
cameraPitchDelta = -cameraPitchDelta; cameraPitchDelta = -cameraPitchDelta;
nextCameraPitch += 0.75 * 5 * cameraPitchDelta * dt * Settings.gamepadSettings.cameraSensitivity; nextCameraPitch += 0.75 * 5 * cameraPitchDelta * dt * Settings.gamepadSettings.cameraSensitivity;

View file

@ -2,6 +2,7 @@ package src;
import hxd.Pad; import hxd.Pad;
import src.Console; import src.Console;
import src.Settings;
class Gamepad { class Gamepad {
public static var gamepad:Pad = Pad.createDummy(); public static var gamepad:Pad = Pad.createDummy();
@ -12,7 +13,7 @@ class Gamepad {
public static function onPad(pad:Pad) { public static function onPad(pad:Pad) {
Console.log("Gamepad found"); Console.log("Gamepad found");
pad.axisDeadZone = 0.2; pad.axisDeadZone = Settings.gamepadSettings.axisDeadzone;
pad.onDisconnect = function() { pad.onDisconnect = function() {
Console.log("Gamepad disconnected"); Console.log("Gamepad disconnected");
gamepad = Pad.createDummy(); gamepad = Pad.createDummy();
@ -100,9 +101,16 @@ class Gamepad {
} }
public static function getAxis(axis:String) { public static function getAxis(axis:String) {
var axisId = getId(axis); switch (axis) {
if (axisId < 0 || axisId > gamepad.values.length) case "analogX":
return gamepad.xAxis;
case "analogY":
return gamepad.yAxis;
case "ranalogX":
return gamepad.rxAxis;
case "ranalogY":
return gamepad.ryAxis;
}
return 0.0; return 0.0;
return gamepad.values[axisId];
} }
} }

View file

@ -1687,7 +1687,7 @@ class Marble extends GameObject {
var move = new Move(); var move = new Move();
move.d = new Vector(); move.d = new Vector();
if (this.controllable && this.mode != Finish && !MarbleGame.instance.paused && !this.level.isWatching) { if (this.controllable && this.mode != Finish && !MarbleGame.instance.paused && !this.level.isWatching) {
move.d.x = -Gamepad.getAxis(Settings.gamepadSettings.moveYAxis); move.d.x = Gamepad.getAxis(Settings.gamepadSettings.moveYAxis);
move.d.y = -Gamepad.getAxis(Settings.gamepadSettings.moveXAxis); move.d.y = -Gamepad.getAxis(Settings.gamepadSettings.moveXAxis);
if (Key.isDown(Settings.controlsSettings.forward)) { if (Key.isDown(Settings.controlsSettings.forward)) {
move.d.x -= 1; move.d.x -= 1;

View file

@ -85,6 +85,7 @@ typedef GamepadSettings = {
var cameraSensitivity:Float; var cameraSensitivity:Float;
var invertXAxis:Bool; var invertXAxis:Bool;
var invertYAxis:Bool; var invertYAxis:Bool;
var axisDeadzone:Float;
var respawn:Array<String>; var respawn:Array<String>;
var blast:Array<String>; var blast:Array<String>;
} }
@ -165,6 +166,7 @@ class Settings {
cameraSensitivity: 1.0, cameraSensitivity: 1.0,
invertXAxis: false, invertXAxis: false,
invertYAxis: false, invertYAxis: false,
axisDeadzone: 0.15,
respawn: ["back"], respawn: ["back"],
blast: ["X", "LB", "RB"] blast: ["X", "LB", "RB"]
} }