Tricky_Fat_Cat

GM2 Simple Input Manager

Sep 28th, 2019
1,086
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //------------------------------------------------------------------------------------------------------//
  2. // Create //
  3. //------------------------------------------------------------------------------------------------------//
  4.  
  5. // Create a list of gamepad slots
  6. connectedGamepads = ds_list_create();
  7.  
  8. // Set active gamepad
  9. global.ActiveGamepad = noone;
  10.  
  11. // Setup input methods
  12. enum InputMethod
  13. {
  14.     Gamepad,
  15.     KeyboardMouse
  16. }
  17.  
  18. // Set current input
  19. global.CurrentInput = InputMethod.KeyboardMouse;
  20.  
  21. // Set deadzone and threshhold for Xbox gamepad
  22. xboxAxisDeadzone = 0.25;
  23. xboxButtonThreshhold = 0.1;
  24.  
  25. // Set deadzone and threshhold for PS4 gamepad
  26. ps4AxisDeadzone = 0.2;
  27. ps4ButtonThreshhold = 0.1;
  28.  
  29.  
  30. //------------------------------------------------------------------------------------------------------//
  31. // Begin step //
  32. //------------------------------------------------------------------------------------------------------//
  33.  
  34. /// @description InputSwitcher
  35.  
  36. var _listSize = ds_list_size(connectedGamepads);
  37.  
  38. if (_lsitSize != 0)
  39. {
  40.     for (var i = 0; i < _listSize; i++)
  41.     {
  42.         var _slot = connectedGamepads[| i];
  43.        
  44.         var _leftStickV = gamepad_axis_value(_slot, gp_axislv) != 0;
  45.         var _leftStickH = gamepad_axis_value(_slot, gp_axislh) != 0;
  46.         var _rightStickV = gamepad_axis_value(_slot, gp_axisrv) != 0;
  47.         var _rightStickH = gamepad_axis_value(_slot, gp_axisrh) != 0;
  48.  
  49.         for (var k = gp_face1; k < gp_axisrv; k++)
  50.         {
  51.             if (gamepad_button_check_pressed(_slot, k))
  52.             {
  53.                 global.CurrentInput = InputMethod.Gamepad;
  54.                 set_active_gamepad(_slot);
  55.             }
  56.         }
  57.  
  58.         if (_leftStickV && _leftStickH) || (_rightStickV && _rightStickH)
  59.         {
  60.             global.CurrentInput = InputMethod.Gamepad;
  61.             set_active_gamepad(_slot);
  62.         }
  63.     }
  64.    
  65.     if (global.CurrentInput != InputMethod.KeyboardMouse)
  66.     {
  67.         var _mouseKeyPressed = mouse_check_button_pressed(mb_any);
  68.         var _keyboardKeyPressed = keyboard_check_pressed(vk_anykey);
  69.        
  70.         if (_mouseKeyPressed || _keyboardKeyPressed)
  71.         {
  72.             global.CurrentInput = InputMethod.KeyboardMouse;
  73.         }
  74.     }
  75. }
  76.  
  77.  
  78. //------------------------------------------------------------------------------------------------------//
  79. // Async-system //
  80. //------------------------------------------------------------------------------------------------------//
  81.  
  82. /// @description GamepadConnectionHandler
  83.  
  84. switch(async_load[? "event_type"])          
  85. {
  86.     case "gamepad discovered":
  87.         var _gamepadSlot = async_load[? "pad_index"];
  88.        
  89.         if (gamepad_is_supported())
  90.         {
  91.             ds_list_add(connectedGamepads, _gamepadSlot);
  92.             set_active_gamepad(_gamepadSlot);
  93.             global.CurrentInput = InputMethod.Gamepad;
  94.         }
  95.     break;
  96.    
  97.     case "gamepad lost":
  98.         var _gamepadSlot = async_load[? "pad_index"];
  99.         var _gamepadListIndex = ds_list_find_index(connectedGamepads, _gamepadSlot);
  100.  
  101.         ds_list_delete(connectedGamepads, _gamepadListIndex);
  102.        
  103.         var _listSize = ds_list_size(connectedGamepads);
  104.        
  105.         if (_listSize == 0)
  106.         {
  107.             global.ActiveGamepad = noone;
  108.             global.CurrentInput = InputMethod.KeyboardMouse;
  109.         }
  110.         else if (_gamepadSlot == global.ActiveGamepad)
  111.         {
  112.             global.ActiveGamepad = connectedGamepads[| 0];
  113.         }
  114.     break;
  115. }
  116.  
  117.  
  118. //------------------------------------------------------------------------------------------------------//
  119. // Clean Up //
  120. //------------------------------------------------------------------------------------------------------//
  121.  
  122. ds_list_destroy(connectedGamepads);
  123.  
  124.  
  125. //------------------------------------------------------------------------------------------------------//
  126. // set_active_gamepad script //
  127. //------------------------------------------------------------------------------------------------------//
  128.  
  129. // @param gamepadSlot
  130.  
  131. var _gamepadSlot = argument0;
  132.  
  133. global.ActiveGamepad = _gamepadSlot;
  134. if (_gamepadSlot >= 0 && _gamepadSlot <= 3) // Set dead zones for Xbox controller
  135. {
  136.     gamepad_set_axis_deadzone(_gamepadSlot, xboxAxisDeadzone);
  137.     gamepad_set_button_threshold(_gamepadSlot, xboxButtonThreshhold);
  138. }
  139. else // Set dead zones for Playstation controller
  140. {
  141.     gamepad_set_axis_deadzone(_gamepadSlot, ps4AxisDeadzone);
  142.     gamepad_set_button_threshold(_gamepadSlot, ps4ButtonThreshhold);
  143. }
Advertisement
Add Comment
Please, Sign In to add comment