mirror of
https://github.com/FunkinCrew/Funkin.git
synced 2024-11-30 11:26:53 -05:00
223 lines
No EOL
7.2 KiB
Haxe
223 lines
No EOL
7.2 KiB
Haxe
package ;
|
|
|
|
import Controls;
|
|
|
|
import flixel.FlxG;
|
|
import flixel.input.gamepad.FlxGamepad;
|
|
import flixel.input.gamepad.FlxGamepadInputID;
|
|
import flixel.input.keyboard.FlxKey;
|
|
|
|
using flixel.util.FlxStringUtil;
|
|
|
|
class InputFormatter
|
|
{
|
|
static public function format(id:Int, device:Device):String
|
|
{
|
|
return switch (device)
|
|
{
|
|
case Keys: getKeyName(id);
|
|
case Gamepad(gamepadID): getButtonName(id, FlxG.gamepads.getByID(gamepadID));
|
|
}
|
|
}
|
|
|
|
static public function getKeyName(id:Int):String
|
|
{
|
|
return switch(id)
|
|
{
|
|
case ZERO : "0";
|
|
case ONE : "1";
|
|
case TWO : "2";
|
|
case THREE : "3";
|
|
case FOUR : "4";
|
|
case FIVE : "5";
|
|
case SIX : "6";
|
|
case SEVEN : "7";
|
|
case EIGHT : "8";
|
|
case NINE : "9";
|
|
case PAGEUP : "PgU";
|
|
case PAGEDOWN : "PgD";
|
|
case HOME : "Hm";
|
|
case END : "End";
|
|
case INSERT : "Ins";
|
|
case ESCAPE : "Esc";
|
|
case MINUS : "-";
|
|
case PLUS : "+";
|
|
case DELETE : "Del";
|
|
case BACKSPACE : "Bck";
|
|
case LBRACKET : "[";
|
|
case RBRACKET : "]";
|
|
case BACKSLASH : "\\";
|
|
case CAPSLOCK : "Cap";
|
|
case SEMICOLON : ";";
|
|
case QUOTE : "'";
|
|
case ENTER : "Ent";
|
|
case SHIFT : "Shf";
|
|
case COMMA : ",";
|
|
case PERIOD : ".";
|
|
case SLASH : "/";
|
|
case GRAVEACCENT : "`";
|
|
case CONTROL : "Ctl";
|
|
case ALT : "Alt";
|
|
case SPACE : "Spc";
|
|
case UP : "Up";
|
|
case DOWN : "Dn";
|
|
case LEFT : "Lf";
|
|
case RIGHT : "Rt";
|
|
case TAB : "Tab";
|
|
case PRINTSCREEN : "Prt";
|
|
case NUMPADZERO : "#0";
|
|
case NUMPADONE : "#1";
|
|
case NUMPADTWO : "#2";
|
|
case NUMPADTHREE : "#3";
|
|
case NUMPADFOUR : "#4";
|
|
case NUMPADFIVE : "#5";
|
|
case NUMPADSIX : "#6";
|
|
case NUMPADSEVEN : "#7";
|
|
case NUMPADEIGHT : "#8";
|
|
case NUMPADNINE : "#9";
|
|
case NUMPADMINUS : "#-";
|
|
case NUMPADPLUS : "#+";
|
|
case NUMPADPERIOD : "#.";
|
|
case NUMPADMULTIPLY: "#*";
|
|
default: titleCaseTrim(FlxKey.toStringMap[id]);
|
|
}
|
|
}
|
|
|
|
static var dirReg = ~/^(l|r).?-(left|right|down|up)$/;
|
|
inline static public function getButtonName(id:Int, gamepad:FlxGamepad):String
|
|
{
|
|
return switch(gamepad.getInputLabel(id))
|
|
{
|
|
// case null | "": shortenButtonName(FlxGamepadInputID.toStringMap[id]);
|
|
case label: shortenButtonName(label);
|
|
}
|
|
}
|
|
|
|
static function shortenButtonName(name:String)
|
|
{
|
|
return switch (name == null ? "" : name.toLowerCase())
|
|
{
|
|
case "": "[?]";
|
|
case "square" : "[]";
|
|
case "circle" : "()";
|
|
case "triangle": "/\\";
|
|
case "plus" : "+";
|
|
case "minus" : "-";
|
|
case "home" : "Hm";
|
|
case "guide" : "Gd";
|
|
case "back" : "Bk";
|
|
case "select" : "Bk";
|
|
case "start" : "St";
|
|
case "left" : "Lf";
|
|
case "right" : "Rt";
|
|
case "down" : "Dn";
|
|
case "up" : "Up";
|
|
case dir if (dirReg.match(dir)):
|
|
dirReg.matched(1).toUpperCase() + "-"
|
|
+ switch (dirReg.matched(2))
|
|
{
|
|
case "left" : "L";
|
|
case "right": "R";
|
|
case "down" : "D";
|
|
case "up" : "U";
|
|
default: throw "Unreachable exaustiveness case";
|
|
};
|
|
case label: titleCaseTrim(label);
|
|
}
|
|
}
|
|
|
|
inline static function titleCaseTrim(str:String, length = 3)
|
|
{
|
|
return str.charAt(0).toUpperCase() + str.substr(1, length - 1).toLowerCase();
|
|
}
|
|
|
|
inline static public function parsePadName(name:String):ControllerName
|
|
{
|
|
return ControllerName.parseName(name);
|
|
}
|
|
|
|
inline static public function getPadName(gamepad:FlxGamepad):ControllerName
|
|
{
|
|
return ControllerName.getName(gamepad);
|
|
}
|
|
|
|
inline static public function getPadNameById(id:Int):ControllerName
|
|
{
|
|
return ControllerName.getNameById(id);
|
|
}
|
|
}
|
|
|
|
@:forward
|
|
@:enum abstract ControllerName(String) from String to String
|
|
{
|
|
var OUYA = "Ouya" ;
|
|
var PS4 = "PS4" ;
|
|
var LOGI = "Logi" ;
|
|
var XBOX = "XBox" ;
|
|
var XINPUT = "XInput" ;
|
|
var WII = "Wii" ;
|
|
var PRO_CON = "Pro_Con" ;
|
|
var JOYCONS = "Joycons" ;
|
|
var JOYCON_L = "Joycon_L";
|
|
var JOYCON_R = "Joycon_R";
|
|
var MFI = "MFI" ;
|
|
var PAD = "Pad" ;
|
|
|
|
static public function getAssetByDevice(device:Device):String
|
|
{
|
|
return switch (device)
|
|
{
|
|
case Keys: getAsset(null);
|
|
case Gamepad(id): getAsset(FlxG.gamepads.getByID(id));
|
|
}
|
|
}
|
|
|
|
static public function getAsset(gamepad:FlxGamepad):String
|
|
{
|
|
if (gamepad == null)
|
|
return 'assets/images/ui/devices/Keys.png';
|
|
|
|
final name = parseName(gamepad.name);
|
|
var path = 'assets/images/ui/devices/$name.png';
|
|
if (openfl.utils.Assets.exists(path))
|
|
return path;
|
|
|
|
return 'assets/images/ui/devices/Pad.png';
|
|
}
|
|
|
|
|
|
|
|
inline static public function getNameById(id:Int):ControllerName return getName(FlxG.gamepads.getByID(id));
|
|
inline static public function getName(gamepad:FlxGamepad):ControllerName return parseName(gamepad.name);
|
|
static public function parseName(name:String):ControllerName
|
|
{
|
|
name = name.toLowerCase().remove("-").remove("_");
|
|
return
|
|
if (name.contains("ouya"))
|
|
OUYA;
|
|
else if (name.contains("wireless controller") || name.contains("ps4"))
|
|
PS4;
|
|
else if (name.contains("logitech"))
|
|
LOGI;
|
|
else if (name.contains("xbox"))
|
|
XBOX
|
|
else if (name.contains("xinput"))
|
|
XINPUT;
|
|
else if (name.contains("nintendo rvlcnt01tr") || name.contains("nintendo rvlcnt01"))
|
|
WII;
|
|
else if (name.contains("mayflash wiimote pc adapter"))
|
|
WII;
|
|
else if (name.contains("pro controller"))
|
|
PRO_CON;
|
|
else if (name.contains("joycon l+r"))
|
|
JOYCONS;
|
|
else if (name.contains("joycon (l)"))
|
|
JOYCON_L;
|
|
else if (name.contains("joycon (r)"))
|
|
JOYCON_R;
|
|
else if (name.contains("mfi"))
|
|
MFI;
|
|
else
|
|
PAD;
|
|
}
|
|
} |