Last active
August 29, 2015 14:27
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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