Skip to content

Instantly share code, notes, and snippets.

@Hasufel
Last active August 29, 2015 14:27
Show Gist options
  • Save Hasufel/3b9d8e4afea9eec2e3eb to your computer and use it in GitHub Desktop.
Save Hasufel/3b9d8e4afea9eec2e3eb to your computer and use it in GitHub Desktop.
Gamepad handling in openfl next with the help of lime (without polling need)
package;
import openfl.display.Sprite;
import openfl.Lib;
import lime.ui.Gamepad;
import lime.ui.GamepadAxis;
import lime.ui.GamepadButton;
class Main extends Sprite {
private var _gamepads:Array<Int> = [];
public function new() {
super();
init();
}
private function init():Void {
Lib.application.window.onGamepadButtonDown.add (onButtonDown);
Lib.application.window.onGamepadButtonUp.add (onButtonUp);
Lib.application.window.onGamepadAxisMove.add (onAxisMove);
Lib.application.window.onGamepadConnect.add(onGamepadConnect);
Lib.application.window.onGamepadDisconnect.add(onGamepadDisconnect);
}
private function onButtonDown (g:Gamepad, b:GamepadButton):Void {
if (!searchGamepad(g.id)) return;
trace(b + ' pressed' + ' on gamepad ' + g.id);
}
private function onButtonUp (g:Gamepad, b:GamepadButton):Void {
if (!searchGamepad(g.id)) return;
trace(b + ' released' + ' on gamepad ' + g.id);
}
private function onAxisMove (g:Gamepad, a:GamepadAxis, v:Float):Void {
if ((v > 0 && v < 0.02) || (v < 0 && v > -0.02)) v = 0; //additional analog jitter filter
//if (v > 0.99 && v < 1.0) v = 1; //additional analog trigger filter //not needed anymore with https://github.com/openfl/lime/pull/535
switch (Std.string(a)) {
case "LEFT_X": trace('LEFT_X:' + v);
case "LEFT_Y": trace('LEFT_Y:' + v);
case "RIGHT_X": trace('RIGHT_X:' + v);
case "RIGHT_Y": trace('RIGHT_Y:' + v);
case "TRIGGER_LEFT": trace('TRIGGER_LEFT:' + v);
case "TRIGGER_RIGHT": trace('TRIGGER_RIGHT:' + v);
default: trace(Std.string(a) + ':' + v);
}
}
private function onGamepadConnect (g:Gamepad):Void {
if (searchGamepad(g.id)) return;
else {
trace('gamepad ' + g.id + ' ('+ g.name + ') connected');
_gamepads.push(g.id);
}
}
private function onGamepadDisconnect (g:Gamepad):Void {
trace('gamepad ' + g.id + ' disconnected');
_gamepads.remove(g.id);
}
private function searchGamepad (id:Int):Bool {
if (_gamepads.indexOf(id) == -1) return false;
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment