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 native PSVita gamepad controls (WiiU, PS4, XBOX1 to follow soon, … #1714

Merged
merged 1 commit into from
Feb 3, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions flixel/input/gamepad/FlxGamepad.hx
Original file line number Diff line number Diff line change
Expand Up @@ -875,6 +875,7 @@ enum FlxGamepadModel
PS3;
PS4;
XBOX360;
PSVITA;
XINPUT;
MAYFLASH_WII_REMOTE;
WII_REMOTE;
Expand Down
11 changes: 11 additions & 0 deletions flixel/input/gamepad/FlxGamepadManager.hx
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,17 @@ class FlxGamepadManager implements IFlxInputManager

private function getModelFromFlashDeviceName(str:String):FlxGamepadModel
{
//If we're actually running on console hardware, we know what controller hardware you're using
//TODO: add support for multiple controller types on console that support that (wiiu for instance)

#if vita
return PSVITA;
#elseif ps4
return PS4;
#elseif xbox1
return XInput;
#end

str = str.toLowerCase();
var strip = ["-", "_"];
for (s in strip)
Expand Down
49 changes: 49 additions & 0 deletions flixel/input/gamepad/FlxGamepadMapping.hx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import flixel.input.gamepad.id.LogitechID;
import flixel.input.gamepad.id.OUYAID;
import flixel.input.gamepad.id.PS4ID;
import flixel.input.gamepad.id.MayflashWiiRemoteID;
import flixel.input.gamepad.id.PSVitaID;
import flixel.input.gamepad.id.WiiRemoteID;
import flixel.input.gamepad.id.XBox360ID;
import flixel.input.gamepad.id.XInputID;
Expand Down Expand Up @@ -57,6 +58,7 @@ class FlxGamepadMapping
case OUYA: getRawOUYA(ID);
case PS4: getRawPS4(ID);
case XBOX360: getRawXBox360(ID);
case PSVITA: getRawPSVita(ID);
case XINPUT: getRawXInput(ID);
case MAYFLASH_WII_REMOTE:
switch (attachment)
Expand Down Expand Up @@ -90,6 +92,7 @@ class FlxGamepadMapping
case OUYA: getIDOUYA(RawID);
case PS4: getIDPS4(RawID);
case XBOX360: getIDXBox360(RawID);
case PSVITA: getIDPSVita(RawID);
case XINPUT: getIDXInput(RawID);
case MAYFLASH_WII_REMOTE:
switch (attachment)
Expand Down Expand Up @@ -125,6 +128,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.LEFT_ANALOG_STICK;
case PS4: PS4ID.LEFT_ANALOG_STICK;
case XBOX360: XBox360ID.LEFT_ANALOG_STICK;
case PSVITA: PSVitaID.LEFT_ANALOG_STICK;
case XINPUT: XInputID.LEFT_ANALOG_STICK;
case MAYFLASH_WII_REMOTE:
switch (attachment)
Expand All @@ -150,6 +154,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.RIGHT_ANALOG_STICK;
case PS4: PS4ID.RIGHT_ANALOG_STICK;
case XBOX360: XBox360ID.RIGHT_ANALOG_STICK;
case PSVITA: PSVitaID.RIGHT_ANALOG_STICK;
case XINPUT: XInputID.RIGHT_ANALOG_STICK;
case MAYFLASH_WII_REMOTE:
switch (attachment)
Expand Down Expand Up @@ -181,6 +186,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.getFlipAxis(AxisID);
case PS4: PS4ID.getFlipAxis(AxisID);
case XBOX360: XBox360ID.getFlipAxis(AxisID, _manufacturer);
case PSVITA: PSVitaID.getFlipAxis(AxisID);
case XINPUT: XInputID.getFlipAxis(AxisID);
case MAYFLASH_WII_REMOTE: MayflashWiiRemoteID.getFlipAxis(AxisID, attachment);
case WII_REMOTE: WiiRemoteID.getFlipAxis(AxisID, attachment);
Expand Down Expand Up @@ -230,6 +236,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.isAxisForMotion(ID);
case PS4: PS4ID.isAxisForMotion(ID);
case XBOX360: XBox360ID.isAxisForMotion(ID);
case PSVITA: PSVitaID.isAxisForMotion(ID);
case XINPUT: XInputID.isAxisForMotion(ID);
case MAYFLASH_WII_REMOTE: MayflashWiiRemoteID.isAxisForMotion(ID, attachment);
case WII_REMOTE: WiiRemoteID.isAxisForMotion(ID, attachment);
Expand All @@ -246,6 +253,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.SUPPORTS_MOTION;
case PS4: PS4ID.SUPPORTS_MOTION;
case XBOX360: XBox360ID.SUPPORTS_MOTION;
case PSVITA: PSVitaID.SUPPORTS_MOTION;
case XINPUT: XInputID.SUPPORTS_MOTION;
case MAYFLASH_WII_REMOTE: MayflashWiiRemoteID.SUPPORTS_MOTION;
case WII_REMOTE: WiiRemoteID.SUPPORTS_MOTION;
Expand All @@ -262,6 +270,7 @@ class FlxGamepadMapping
case OUYA: OUYAID.SUPPORTS_POINTER;
case PS4: PS4ID.SUPPORTS_POINTER;
case XBOX360: XBox360ID.SUPPORTS_POINTER;
case PSVITA: PSVitaID.SUPPORTS_POINTER;
case XINPUT: XInputID.SUPPORTS_POINTER;
case MAYFLASH_WII_REMOTE: MayflashWiiRemoteID.SUPPORTS_POINTER;
case WII_REMOTE: WiiRemoteID.SUPPORTS_POINTER;
Expand Down Expand Up @@ -351,6 +360,26 @@ class FlxGamepadMapping
}
}

public function getRawPSVita(ID:FlxGamepadInputID):Int
{
return switch (ID)
{
case A: PSVitaID.X;
case B: PSVitaID.CIRCLE;
case X: PSVitaID.SQUARE;
case Y: PSVitaID.TRIANGLE;
case BACK: PSVitaID.SELECT;
case START: PSVitaID.START;
case LEFT_SHOULDER: PSVitaID.L;
case RIGHT_SHOULDER: PSVitaID.R;
case DPAD_UP: PSVitaID.DPAD_UP;
case DPAD_DOWN: PSVitaID.DPAD_DOWN;
case DPAD_LEFT: PSVitaID.DPAD_LEFT;
case DPAD_RIGHT: PSVitaID.DPAD_RIGHT;
default: -1;
}
}

public function getRawXBox360(ID:FlxGamepadInputID):Int
{
return switch (ID)
Expand Down Expand Up @@ -646,6 +675,26 @@ class FlxGamepadMapping
}
}

public function getIDPSVita(rawID:Int):FlxGamepadInputID
{
return switch (rawID)
{
case PSVitaID.X: A;
case PSVitaID.CIRCLE: B;
case PSVitaID.SQUARE: X;
case PSVitaID.TRIANGLE: Y;
case PSVitaID.SELECT: BACK;
case PSVitaID.START: START;
case PSVitaID.L: LEFT_SHOULDER;
case PSVitaID.R: RIGHT_SHOULDER;
case PSVitaID.DPAD_DOWN: DPAD_DOWN;
case PSVitaID.DPAD_UP: DPAD_UP;
case PSVitaID.DPAD_LEFT: DPAD_LEFT;
case PSVitaID.DPAD_RIGHT: DPAD_RIGHT;
default: NONE;
}
}

public function getIDXBox360(rawID:Int):FlxGamepadInputID
{
return switch (rawID)
Expand Down
63 changes: 63 additions & 0 deletions flixel/input/gamepad/id/PSVitaID.hx
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package flixel.input.gamepad.id;
import flixel.input.gamepad.FlxGamepad.FlxGamepadAnalogStick;

/**
* Native PSVita input values.
* (The only way to use these is to actually be using a PSVita with the upcoming openfl vita target!)
*
* This will ONLY work with the gamepad API (available only in OpenFL "next", not "legacy") and will NOT work with the joystick API
*
* @author ...
*/
class PSVitaID
{

//TODO:
//Analog sticks work, but vertical axis is flipped
//X = start
//TRIANGLE = L
//SELECT = R
//START = Dpad down
//LH = A
//LV = B
//RH = X
//RV = Y

public static inline var SUPPORTS_MOTION = false;
public static inline var SUPPORTS_POINTER = false;

public static inline function getFlipAxis(AxisID:Int):Int
{
return switch(AxisID) {
case LEFT_STICK_V : -1;
case RIGHT_STICK_V: -1;
default: 1;
}
}

public static function isAxisForMotion(ID:FlxGamepadInputID):Bool { return false; }

// Button IDs
public static inline var X:Int = 6;
public static inline var CIRCLE:Int = 7;
public static inline var SQUARE:Int = 8;
public static inline var TRIANGLE:Int = 9;
public static inline var SELECT:Int = 10;
public static inline var START:Int = 12;
public static inline var L:Int = 15;
public static inline var R:Int = 16;

public static inline var DPAD_UP:Int = 17;
public static inline var DPAD_DOWN:Int = 18;
public static inline var DPAD_LEFT:Int = 19;
public static inline var DPAD_RIGHT:Int = 20;

// Axis indices
public static var LEFT_ANALOG_STICK(default, null) = new FlxGamepadAnalogStick(LEFT_STICK_H, LEFT_STICK_V);
public static var RIGHT_ANALOG_STICK(default, null) = new FlxGamepadAnalogStick(RIGHT_STICK_H, RIGHT_STICK_V);

private static inline var LEFT_STICK_H:Int = 0;
private static inline var LEFT_STICK_V:Int = 1;
private static inline var RIGHT_STICK_H:Int = 2;
private static inline var RIGHT_STICK_V:Int = 3;
}