Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Wiimote support #1563

Merged
merged 21 commits into from
Jul 15, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
eb7764b
Adding Wii Remote support (with DolphinBar)
larsiusprime Jul 11, 2015
fa6be21
Working on more gamepad wiiu stuff
larsiusprime Jul 13, 2015
9c449d9
input/gamepads: WiiRemote - Fix inverted dpad
larsiusprime Jul 14, 2015
c554014
input/gamepads: remove speculative inputs that none of my hardware ev…
larsiusprime Jul 14, 2015
8f46b51
Merge branch 'dev' of https://github.com/HaxeFlixel/flixel into wiimote
larsiusprime Jul 14, 2015
81ccbc7
input/gamepad: Removed PS3 class, because there are no default driver…
larsiusprime Jul 14, 2015
843fe13
FlxGamepad: removed trace code
larsiusprime Jul 14, 2015
ab1c615
input/gamepads: PR cleanup
larsiusprime Jul 14, 2015
8c38d80
input/gamepad -- added SUPPORTS_POINTER checks, more formatting cleanup
larsiusprime Jul 14, 2015
7fcf6ef
input/gamepads: cleanup
larsiusprime Jul 14, 2015
2a567f8
input/gamepad: trash debug code
larsiusprime Jul 14, 2015
5bf32dd
input/gamepad: fix toString() for FlxGamepad
larsiusprime Jul 14, 2015
03312ed
input/gamepad -- documentation for gamepad.pointer
larsiusprime Jul 14, 2015
3b7d6e8
input/gamepad : compile fix
larsiusprime Jul 14, 2015
9ac90d6
input/gamepad: documentation
larsiusprime Jul 14, 2015
4c4c89f
input/gamepad: (fix) motion should always be -1 to 1 range on all tar…
larsiusprime Jul 14, 2015
ea289b1
input/gamepads: added documentation, cleaned up y axis inversion for …
larsiusprime Jul 14, 2015
5bb1b86
input/gamepad ... only getting inverted y axis on standalone windows/…
larsiusprime Jul 14, 2015
a56fda4
input/gamepads documentation for FlxAnalogToDigitalMode
larsiusprime Jul 14, 2015
522b957
input/gamepad: cleanup
larsiusprime Jul 14, 2015
244360b
inpuput/gamepad: disable JS #ifs to get it to compile
larsiusprime Jul 15, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
237 changes: 194 additions & 43 deletions flixel/input/gamepad/FlxGamepad.hx

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions flixel/input/gamepad/FlxGamepadInputID.hx
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,25 @@ abstract FlxGamepadInputID(Int) from Int to Int
var LEFT_STICK_FAKE = 24;
var RIGHT_STICK_FAKE = 25;
#end

/**tilting towards or away from the ceiling (think "look up", "look down")**/
var TILT_PITCH = 26;
/**tilting side-to-side (think "twisting", or "do a barrel roll!")**/
var TILT_ROLL = 27;

/**for a mouse-like input such as touch or IR camera. Horizontal axis.**/
var POINTER_X = 28;
/**for a mouse-like input such as touch or IR camera. Vertical axis.**/
var POINTER_Y = 29;

/**an extra digital button that doesn't fit cleanly into the universal template**/
var EXTRA_0 = 30;
/**an extra digital button that doesn't fit cleanly into the universal template**/
var EXTRA_1 = 31;
/**an extra digital button that doesn't fit cleanly into the universal template**/
var EXTRA_2 = 32;
/**an extra digital button that doesn't fit cleanly into the universal template**/
var EXTRA_3 = 33;

@:from
public static inline function fromString(s:String)
Expand Down
97 changes: 79 additions & 18 deletions flixel/input/gamepad/FlxGamepadManager.hx
Original file line number Diff line number Diff line change
Expand Up @@ -437,13 +437,18 @@ class FlxGamepadManager implements IFlxInputManager
}
}

//"Sony PLAYSTATION(R)3 Controller" is the PS3 controller, but that is not supported as its PC drivers are terrible,
//and the most popular tools just turn it into a 360 controller

// needs to be checked even though it's default to not mistake it for XInput on flash
return if (str.contains("xbox") && str.contains("360")) XBox360;
else if (str.contains("playstation")) PS3; //"Sony PLAYSTATION(R)3 Controller"
else if (str.contains("ouya")) OUYA; //"OUYA Game Controller"
else if (str.contains("ouya")) OUYA; //"OUYA Game Controller"
else if (str.contains("wireless controller") || str.contains("ps4")) PS4; //"Wireless Controller" or "PS4 controller"
else if (str.contains("logitech")) Logitech;
else if (str.contains("xinput")) XInput;
else if (str.contains("nintendo rvlcnt01tr")) WiiRemote; //WiiRemote with motion plus
else if (str.contains("nintendo rvlcnt01")) WiiRemote; //WiiRemote w/o motion plus
else if (str.contains("mayflash wiimote pc adapter")) MayflashWiiRemote; //WiiRemote paired to MayFlash DolphinBar (with or w/o motion plus)
else XBox360; //default
}

Expand All @@ -464,33 +469,34 @@ class FlxGamepadManager implements IFlxInputManager
#end

#if FLX_JOYSTICK_API
private function handleButtonDown(FlashEvent:JoystickEvent):Void
private function getModelFromJoystick(f:Float):FlxGamepadModel
{
var gamepad:FlxGamepad = createByID(FlashEvent.device);
var button:FlxGamepadButton = gamepad.getButton(FlashEvent.id);
//id "1" is PS3, but that is not supported as its PC drivers are terrible, and the most popular tools just turn it into a 360 controller

if (button != null)
return switch (Math.round(f))
{
button.press();
case 2: PS4;
case 3: OUYA;
case 4: MayflashWiiRemote;
case 5: WiiRemote;
default: XBox360;
}
}

private function getModelFromJoystick(f:Float):FlxGamepadModel
private function handleButtonDown(FlashEvent:JoystickEvent):Void
{
return switch (Math.round(f))
var gamepad:FlxGamepad = createByID(FlashEvent.device);
var button:FlxGamepadButton = gamepad.getButton(FlashEvent.id);
if (button != null)
{
case 1: PS3;
case 2: PS4;
case 3: OUYA;
default: XBox360;
button.press();
}
}

private function handleButtonUp(FlashEvent:JoystickEvent):Void
{
var gamepad:FlxGamepad = createByID(FlashEvent.device);
var button:FlxGamepadButton = gamepad.getButton(FlashEvent.id);

if (button != null)
{
button.release();
Expand All @@ -500,16 +506,71 @@ class FlxGamepadManager implements IFlxInputManager
private function handleAxisMove(FlashEvent:JoystickEvent):Void
{
var gamepad:FlxGamepad = createByID(FlashEvent.device);
gamepad.axis = FlashEvent.axis;
for (i in 0...gamepad.axis.length)

var oldAxis = gamepad.axis;
var newAxis = FlashEvent.axis;

for (i in 0...newAxis.length)
{
if (!gamepad.isAxisForAnalogStick(i))
var isForStick = gamepad.isAxisForAnalogStick(i);
var isForMotion = gamepad.isAxisForMotion(i);
if (!isForStick && !isForMotion)
{
// in legacy this returns a (-1,1) range, but in flash/next it
// returns (0,1) so we normalize to (0,1) for legacy target only
gamepad.axis[i] = (gamepad.axis[i] + 1) / 2;
newAxis[i] = (newAxis[i] + 1) / 2;
}
else if(isForStick)
{
//check to see if we should send digital inputs as well as analog
var stick:FlxGamepadAnalogStick = gamepad.getAnalogStickByAxis(i);
if (stick.mode == OnlyDigital || stick.mode == Both)
{
var newVal = newAxis[i];
var oldVal = oldAxis[i];

var neg = stick.digitalThreshold * -1;
var pos = stick.digitalThreshold;
var digitalButton = -1;

//pressed/released for digital LEFT/UP
if (newVal < neg && oldVal >= neg)
{
if (i == stick.x) digitalButton = stick.rawLeft;
else if (i == stick.y) digitalButton = stick.rawUp;
handleButtonDown(new JoystickEvent(JoystickEvent.BUTTON_DOWN, FlashEvent.bubbles, FlashEvent.cancelable, FlashEvent.device, digitalButton));
}
else if (newVal >= neg && oldVal < neg)
{
if (i == stick.x) digitalButton = stick.rawLeft;
else if (i == stick.y) digitalButton = stick.rawUp;
handleButtonUp(new JoystickEvent(JoystickEvent.BUTTON_UP, FlashEvent.bubbles, FlashEvent.cancelable, FlashEvent.device, digitalButton));
}

//pressed/released for digital RIGHT/DOWN
if (newVal > pos && oldVal <= pos)
{
if (i == stick.x) digitalButton = stick.rawRight;
else if (i == stick.y) digitalButton = stick.rawDown;
handleButtonDown(new JoystickEvent(JoystickEvent.BUTTON_DOWN, FlashEvent.bubbles, FlashEvent.cancelable, FlashEvent.device, digitalButton));
}
else if (newVal <= pos && oldVal > pos)
{
if (i == stick.x) digitalButton = stick.rawRight;
else if (i == stick.y) digitalButton = stick.rawDown;
handleButtonUp(new JoystickEvent(JoystickEvent.BUTTON_UP, FlashEvent.bubbles, FlashEvent.cancelable, FlashEvent.device, digitalButton));
}

if (stick.mode == OnlyDigital)
{
//still haven't figured out how to suppress the analog inputs properly. Oh well.
}
}
}
}

gamepad.axis = newAxis;

gamepad.axisActive = true;
}

Expand Down
Loading