76 lines
2.3 KiB
Haxe
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));
|
|
}
|
|
} |