Skip to content

Commit

Permalink
Simplify optional gamepad types addition, remove macro
Browse files Browse the repository at this point in the history
  • Loading branch information
offalynne committed Apr 18, 2023
1 parent 26eaa34 commit ee08eba
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 121 deletions.
1 change: 1 addition & 0 deletions input.yyp
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@
{"id":{"name":"__input_class_cursor","path":"scripts/__input_class_cursor/__input_class_cursor.yy",},"order":11,},
{"id":{"name":"input_cursor_x","path":"scripts/input_cursor_x/input_cursor_x.yy",},"order":0,},
{"id":{"name":"__input_csv_to_array","path":"scripts/__input_csv_to_array/__input_csv_to_array.yy",},"order":8,},
{"id":{"name":"__input_define_gamepad_types","path":"scripts/__input_define_gamepad_types/__input_define_gamepad_types.yy",},"order":10,},
{"id":{"name":"input_gyro_enabled_get","path":"scripts/input_gyro_enabled_get/input_gyro_enabled_get.yy",},"order":2,},
{"id":{"name":"input_profile_set","path":"scripts/input_profile_set/input_profile_set.yy",},"order":4,},
{"id":{"name":"__input_exception_handler","path":"scripts/__input_exception_handler/__input_exception_handler.yy",},"order":12,},
Expand Down
4 changes: 0 additions & 4 deletions scripts/__input_config_gamepads/__input_config_gamepads.gml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
//Default maximum threshold for non-directional (trigger) axes
#macro INPUT_DEFAULT_TRIGGER_MAX_THRESHOLD 1.0

//Whether to use simplified or extended gamepad types
//When <true>, gamepad types will be identified with greater specificity. This may impact icon results and related settings
#macro INPUT_GAMEPAD_EXTENDED_TYPES false

//Whether the game uses the horizontal holdtype for single Joy-Cons. Set this to <false> for vertical holdtype
//Input treats these two modes as mutually exclusive (come talk to us if you need to be able to swap at runtime)
#macro INPUT_SWITCH_HORIZONTAL_HOLDTYPE true
Expand Down
120 changes: 120 additions & 0 deletions scripts/__input_define_gamepad_types/__input_define_gamepad_types.gml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
function __input_define_gamepad_types()
{
__input_global().__simple_type_lookup = {};
with (__input_global().__simple_type_lookup)
{
//Xbox
#macro INPUT_GAMEPAD_TYPE_XBOX_ONE "xbox one"
XBoxOneController = INPUT_GAMEPAD_TYPE_XBOX_ONE;
CommunityXBoxOne = INPUT_GAMEPAD_TYPE_XBOX_ONE;
CommunityDeck = INPUT_GAMEPAD_TYPE_XBOX_ONE;
CommunityLuna = INPUT_GAMEPAD_TYPE_XBOX_ONE;
CommunityStadia = INPUT_GAMEPAD_TYPE_XBOX_ONE;
AppleController = INPUT_GAMEPAD_TYPE_XBOX_ONE;

#macro INPUT_GAMEPAD_TYPE_XBOX_360 "xbox 360"
XBox360Controller = INPUT_GAMEPAD_TYPE_XBOX_360;
CommunityXBox360 = INPUT_GAMEPAD_TYPE_XBOX_360;
CommunityDreamcast = INPUT_GAMEPAD_TYPE_XBOX_360;
SteamController = INPUT_GAMEPAD_TYPE_XBOX_360;
MobileTouch = INPUT_GAMEPAD_TYPE_XBOX_360;

//Default for XInput and Xbox-like gamepads
CommunityLikeXBox = INPUT_GAMEPAD_TYPE_XBOX_ONE;

//PlayStation
#macro INPUT_GAMEPAD_TYPE_PS5 "ps5"
PS5Controller = INPUT_GAMEPAD_TYPE_PS5;

#macro INPUT_GAMEPAD_TYPE_PS4 "ps4"
PS4Controller = INPUT_GAMEPAD_TYPE_PS4;
XInputPS4Controller = INPUT_GAMEPAD_TYPE_PS4;
CommunityPS4 = INPUT_GAMEPAD_TYPE_PS4;

#macro INPUT_GAMEPAD_TYPE_PSX "psx"
PS3Controller = INPUT_GAMEPAD_TYPE_PSX;
CommunityPSX = INPUT_GAMEPAD_TYPE_PSX;

//Switch
#macro INPUT_GAMEPAD_TYPE_SWITCH "switch"
SwitchHandheld = INPUT_GAMEPAD_TYPE_SWITCH;
SwitchJoyConPair = INPUT_GAMEPAD_TYPE_SWITCH;
SwitchProController = INPUT_GAMEPAD_TYPE_SWITCH;
XInputSwitchController = INPUT_GAMEPAD_TYPE_SWITCH;
SwitchInputOnlyController = INPUT_GAMEPAD_TYPE_SWITCH;
CommunityLikeSwitch = INPUT_GAMEPAD_TYPE_SWITCH;
Community8BitDo = INPUT_GAMEPAD_TYPE_SWITCH;
HIDWiiClassic = INPUT_GAMEPAD_TYPE_SWITCH;
CommunitySNES = INPUT_GAMEPAD_TYPE_SWITCH;
CommunitySuperFamicom = INPUT_GAMEPAD_TYPE_SWITCH;

#macro INPUT_GAMEPAD_TYPE_JOYCON_LEFT "switch joycon left"
SwitchJoyConLeft = INPUT_GAMEPAD_TYPE_JOYCON_LEFT;
SwitchJoyConSingle = INPUT_GAMEPAD_TYPE_JOYCON_LEFT;
HIDJoyConLeft = INPUT_GAMEPAD_TYPE_JOYCON_LEFT;

#macro INPUT_GAMEPAD_TYPE_JOYCON_RIGHT "switch joycon right"
SwitchJoyConRight = INPUT_GAMEPAD_TYPE_JOYCON_RIGHT;
HIDJoyConRight = INPUT_GAMEPAD_TYPE_JOYCON_RIGHT;

//GameCube
#macro INPUT_GAMEPAD_TYPE_GAMECUBE "gamecube"
CommunityGameCube = INPUT_GAMEPAD_TYPE_GAMECUBE;

//Unknown
#macro INPUT_GAMEPAD_TYPE_UNKNOWN "unknown"
Unknown = INPUT_GAMEPAD_TYPE_UNKNOWN;
unknown = INPUT_GAMEPAD_TYPE_UNKNOWN;
SteamControllerV2 = INPUT_GAMEPAD_TYPE_UNKNOWN;
UnknownNonSteamController = INPUT_GAMEPAD_TYPE_UNKNOWN;
CommunityUnknown = INPUT_GAMEPAD_TYPE_UNKNOWN;
CommunitySteam = INPUT_GAMEPAD_TYPE_UNKNOWN;

#region Optional gamepad types (default off)

//#macro INPUT_GAMEPAD_TYPE_STEAM_DECK "steam deck"
//CommunityDeck = INPUT_GAMEPAD_TYPE_STEAM_DECK;

//#macro INPUT_GAMEPAD_TYPE_STEAM_CONTROLLER "steam controller"
//SteamController = INPUT_GAMEPAD_TYPE_STEAM_CONTROLLER;

//#macro INPUT_GAMEPAD_TYPE_8BITDO "8bitdo"
//Community8BitDo = INPUT_GAMEPAD_TYPE_8BITDO;

//#macro INPUT_GAMEPAD_TYPE_MFI "mfi"
//AppleController = INPUT_GAMEPAD_TYPE_MFI;

//#macro INPUT_GAMEPAD_TYPE_LUNA "luna"
//CommunityLuna = INPUT_GAMEPAD_TYPE_LUNA;

//#macro INPUT_GAMEPAD_TYPE_STADIA "stadia"
//CommunityStadia = INPUT_GAMEPAD_TYPE_STADIA;

//#macro INPUT_GAMEPAD_TYPE_VCS_CLASSIC "vcs classic"
//CommunityVCSClassic = INPUT_GAMEPAD_TYPE_VCS_CLASSIC;
//HIDAtariVCSClassic = INPUT_GAMEPAD_TYPE_VCS_CLASSIC;

//#macro INPUT_GAMEPAD_TYPE_VCS_MODERN "vcs modern"
//CommunityVCSModern = INPUT_GAMEPAD_TYPE_VCS_MODERN;

//#macro INPUT_GAMEPAD_TYPE_OUYA "ouya"
//CommunityOuya = INPUT_GAMEPAD_TYPE_OUYA;

//#macro INPUT_GAMEPAD_TYPE_DREAMCAST "dreamcast"
//CommunityDreamcast = INPUT_GAMEPAD_TYPE_DREAMCAST;

//#macro INPUT_GAMEPAD_TYPE_N64 "n64"
//CommunityN64 = INPUT_GAMEPAD_TYPE_N64;

//#macro INPUT_GAMEPAD_TYPE_SATURN "saturn"
//CommunitySaturn = INPUT_GAMEPAD_TYPE_SATURN;

//#macro INPUT_GAMEPAD_TYPE_SNES "snes"
//CommunitySNES = INPUT_GAMEPAD_TYPE_SNES;

//#macro INPUT_GAMEPAD_TYPE_SUPER_FAMICOM "super famicom"
//CommunitySuperFamicom = INPUT_GAMEPAD_TYPE_SUPER_FAMICOM;

#endregion
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"resourceType": "GMScript",
"resourceVersion": "1.0",
"name": "__input_define_gamepad_types",
"isDnD": false,
"isCompatibility": false,
"parent": {
"name": "Initialization",
"path": "folders/Input/(System)/Initialization.yy",
},
}
87 changes: 2 additions & 85 deletions scripts/__input_initialize/__input_initialize.gml
Original file line number Diff line number Diff line change
Expand Up @@ -333,96 +333,13 @@ function __input_initialize()

#endregion

var _default_xbox_type = INPUT_GAMEPAD_TYPE_XBOX_ONE; //Default type assigned to XInput and Xbox-like gamepads

#region Gamepad type identification

//Lookup table for simple gamepad types based on raw types
_global.__simple_type_lookup = {

//Xbox
CommunityLikeXBox: _default_xbox_type,

XBoxOneController: INPUT_GAMEPAD_TYPE_XBOX_ONE,
CommunityXBoxOne: INPUT_GAMEPAD_TYPE_XBOX_ONE,
CommunityDeck: INPUT_GAMEPAD_TYPE_XBOX_ONE,
CommunityLuna: INPUT_GAMEPAD_TYPE_XBOX_ONE,
CommunityStadia: INPUT_GAMEPAD_TYPE_XBOX_ONE,
AppleController: INPUT_GAMEPAD_TYPE_XBOX_ONE,

XBox360Controller: INPUT_GAMEPAD_TYPE_XBOX_360,
CommunityXBox360: INPUT_GAMEPAD_TYPE_XBOX_360,
CommunityDreamcast: INPUT_GAMEPAD_TYPE_XBOX_360,
SteamController: INPUT_GAMEPAD_TYPE_XBOX_360,
MobileTouch: INPUT_GAMEPAD_TYPE_XBOX_360,

//PlayStation
PS5Controller: INPUT_GAMEPAD_TYPE_PS5,

PS4Controller: INPUT_GAMEPAD_TYPE_PS4,
XInputPS4Controller: INPUT_GAMEPAD_TYPE_PS4,
CommunityPS4: INPUT_GAMEPAD_TYPE_PS4,

PS3Controller: INPUT_GAMEPAD_TYPE_PSX,
CommunityPSX: INPUT_GAMEPAD_TYPE_PSX,

//Switch
SwitchHandheld: INPUT_GAMEPAD_TYPE_SWITCH,
SwitchJoyConPair: INPUT_GAMEPAD_TYPE_SWITCH,
SwitchProController: INPUT_GAMEPAD_TYPE_SWITCH,
XInputSwitchController: INPUT_GAMEPAD_TYPE_SWITCH,
SwitchInputOnlyController: INPUT_GAMEPAD_TYPE_SWITCH,
CommunityLikeSwitch: INPUT_GAMEPAD_TYPE_SWITCH,
Community8BitDo: INPUT_GAMEPAD_TYPE_SWITCH,
HIDWiiClassic: INPUT_GAMEPAD_TYPE_SWITCH,
CommunitySNES: INPUT_GAMEPAD_TYPE_SWITCH,
CommunitySuperFamicom: INPUT_GAMEPAD_TYPE_SWITCH,

SwitchJoyConLeft: INPUT_GAMEPAD_TYPE_JOYCON_LEFT,
SwitchJoyConSingle: INPUT_GAMEPAD_TYPE_JOYCON_LEFT,
HIDJoyConLeft: INPUT_GAMEPAD_TYPE_JOYCON_LEFT,

SwitchJoyConRight: INPUT_GAMEPAD_TYPE_JOYCON_RIGHT,
HIDJoyConRight: INPUT_GAMEPAD_TYPE_JOYCON_RIGHT,

CommunityGameCube: INPUT_GAMEPAD_TYPE_GAMECUBE,

Unknown: INPUT_GAMEPAD_TYPE_UNKNOWN,
unknown: INPUT_GAMEPAD_TYPE_UNKNOWN,

SteamControllerV2: INPUT_GAMEPAD_TYPE_UNKNOWN,
UnknownNonSteamController: INPUT_GAMEPAD_TYPE_UNKNOWN,
CommunityUnknown: INPUT_GAMEPAD_TYPE_UNKNOWN,
CommunitySteam: INPUT_GAMEPAD_TYPE_UNKNOWN,
}

if (INPUT_GAMEPAD_EXTENDED_TYPES)
{
with (_global.__simple_type_lookup)
{
CommunityDeck = "steam deck";
SteamController = "steam controller";
Community8BitDo = "8bitdo";
AppleController = "mfi";
CommunityLuna = "luna";
CommunityStadia = "stadia";
CommunityVCSModern = "vcs modern";
CommunityVCSClassic = "vcs classic";
HIDAtariVCSClassic = "vcs classic";
CommunityOuya = "ouya";
CommunityDreamcast = "dreamcast";
CommunityN64 = "n64";
CommunitySaturn = "saturn";
CommunitySNES = "snes";
CommunitySuperFamicom = "super famicom";
}
}


//Set up controller type database
__input_define_gamepad_types();

//Parse controller type database
_global.__raw_type_dictionary = {};
_global.__raw_type_dictionary[$ "none"] = _default_xbox_type;

//Load the controller type database
if (__INPUT_ON_CONSOLE || __INPUT_ON_OPERAGX || (os_type == os_ios) || (os_type == os_tvos))
Expand Down
27 changes: 0 additions & 27 deletions scripts/__input_macros/__input_macros.gml
Original file line number Diff line number Diff line change
Expand Up @@ -35,33 +35,6 @@
#macro __INPUT_BINDING_GAMEPAD_BUTTON "gamepad button"
#macro __INPUT_BINDING_GAMEPAD_AXIS "gamepad axis"

#macro INPUT_GAMEPAD_TYPE_XBOX_ONE "xbox one"
#macro INPUT_GAMEPAD_TYPE_XBOX_360 "xbox 360"
#macro INPUT_GAMEPAD_TYPE_PS5 "ps5"
#macro INPUT_GAMEPAD_TYPE_PS4 "ps4"
#macro INPUT_GAMEPAD_TYPE_PSX "psx"
#macro INPUT_GAMEPAD_TYPE_SWITCH "switch"
#macro INPUT_GAMEPAD_TYPE_JOYCON_LEFT "switch joycon left"
#macro INPUT_GAMEPAD_TYPE_JOYCON_RIGHT "switch joycon right"
#macro INPUT_GAMEPAD_TYPE_GAMECUBE "gamecube"
#macro INPUT_GAMEPAD_TYPE_UNKNOWN "unknown"

////Extended types per INPUT_GAMEPAD_EXTENDED_TYPES
//#macro INPUT_GAMEPAD_TYPE_STEAM_DECK "steam deck"
//#macro INPUT_GAMEPAD_TYPE_STEAM_CONTROLLER "steam controller"
//#macro INPUT_GAMEPAD_TYPE_8BITDO "8bitdo"
//#macro INPUT_GAMEPAD_TYPE_MFI "mfi"
//#macro INPUT_GAMEPAD_TYPE_LUNA "luna"
//#macro INPUT_GAMEPAD_TYPE_STADIA "stadia"
//#macro INPUT_GAMEPAD_TYPE_VCS_MODERN "vcs modern"
//#macro INPUT_GAMEPAD_TYPE_VCS_CLASSIC "vcs classic"
//#macro INPUT_GAMEPAD_TYPE_OUYA "ouya"
//#macro INPUT_GAMEPAD_TYPE_DREAMCAST "dreamcast"
//#macro INPUT_GAMEPAD_TYPE_N64 "n64"
//#macro INPUT_GAMEPAD_TYPE_SATURN "saturn"
//#macro INPUT_GAMEPAD_TYPE_SNES "snes"
//#macro INPUT_GAMEPAD_TYPE_SUPER_FAMICOM "super famicom"

#macro INPUT_KEYBOARD __input_global().__source_keyboard
#macro INPUT_MOUSE __input_global().__source_mouse
#macro INPUT_GAMEPAD __input_global().__source_gamepad
Expand Down
5 changes: 0 additions & 5 deletions scripts/__input_validate_macros/__input_validate_macros.gml
Original file line number Diff line number Diff line change
Expand Up @@ -339,11 +339,6 @@ function __input_validate_macros()
__input_error("INPUT_DEFAULT_TRIGGER_MAX_THRESHOLD must be a number less than or equal to 1, and greater than INPUT_DEFAULT_TRIGGER_MIN_THRESHOLD");
}

if (!is_bool(INPUT_GAMEPAD_EXTENDED_TYPES))
{
__input_error("INPUT_GAMEPAD_EXTENDED_TYPES must be either <true> or <false>");
}

if (!is_bool(INPUT_SWITCH_HORIZONTAL_HOLDTYPE))
{
__input_error("INPUT_SWITCH_HORIZONTAL_HOLDTYPE must be either <true> or <false>");
Expand Down

0 comments on commit ee08eba

Please sign in to comment.