anodyne/AIR/intra/hsrc/ca/wegetsignal/nativeextensions/MacJoystickManager.hx

76 lines
2.3 KiB
Haxe

package ca.wegetsignal.nativeextensions;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.StatusEvent;
import flash.external.ExtensionContext;
import global.Keys;
class MacJoystickManager extends EventDispatcher
{
private static inline var EXTENSION_ID:String="ca.wegetsignal.nativeextensions.MacJoyANE";
private var context:ExtensionContext;
private var numJoysticks:Int=0;
public var joysticks:Array<Dynamic>=[];
private static const JOYSTICK_ADDED:String="JOYSTICK_ADDED",
JOYSTICK_REMOVED:String="JOYSTICK_REMOVED",
JOYSTICK_BUTTON_PUSHED:String="JOYSTICK_BUTTON_PUSHED",
JOYSTICK_BUTTON_RELEASED:String="JOYSTICK_BUTTON_RELEASED",
JOYSTICK_AXES_UPDATED:String="JOYSTICK_AXES_UPDATED";
public function new()
{
super();
context=ExtensionContext.createExtensionContext(EXTENSION_ID,null);
context.addEventListener(StatusEvent.STATUS,onStatus);
context.call("initializeGamepads",null);
}
public function numberOfJoysticks():Int {
return numJoysticks;
}
private function onStatus(event:StatusEvent):Void
{
var params:Array<Dynamic>=event.level.split(',');
var affectedJoystick:MacJoystick;
var elementIndex:Int=-1;
switch(event.code){
case JOYSTICK_ADDED:
// level is joystickID,numAxes,numButtons
affectedJoystick=new MacJoystick(int(params[0]),int(params[1]),int(params[2]));
joysticks[int(params[0])]=affectedJoystick;
numJoysticks++;
break;
case JOYSTICK_REMOVED:
affectedJoystick=joysticks[int(params[0])];
joysticks[int(params[0])]=null;
numJoysticks--;
break;
case JOYSTICK_BUTTON_PUSHED:
// level is joystickID,buttonIndex
affectedJoystick=joysticks[int(params[0])]
affectedJoystick.buttons[int(params[1])]=true;
elementIndex=Std.int(params[1]);
break;
case JOYSTICK_BUTTON_RELEASED:
// level is joystickID,buttonIndex
affectedJoystick=joysticks[int(params[0])]
affectedJoystick.buttons[int(params[1])]=false;
elementIndex=Std.int(params[1]);
break;
case JOYSTICK_AXES_UPDATED:
// level is joystickID,[axes]
affectedJoystick=joysticks[int(params[0])]
affectedJoystick.updateAxes(params);
break;
}
dispatchEvent(new MacJoystickEvent(event.code,affectedJoystick,elementIndex));
}
}