1
0

InputManager.gml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. function InputManager() constructor {
  2. var _get_keyboard_key = function(_type, _id) {
  3. switch _type {
  4. case "status": return keyboard_check(_id);
  5. case "pressed": return keyboard_check_pressed(_id);
  6. case "released": return keyboard_check_released(_id);
  7. }
  8. }
  9. var _get_gamepad_button = function(_pad, _type, _id) {
  10. switch _type {
  11. case "status": return gamepad_button_check(_pad, _id);
  12. case "pressed": return gamepad_button_check_pressed(_pad, _id);
  13. case "released": return gamepad_button_check_released(_pad, _id);
  14. }
  15. }
  16. var _get_gamepad_axis = function(_pad, _type, _axis, _direction, _threshold) {
  17. switch _type {
  18. case "value": return gamepad_axis_value(_pad, _axis);
  19. case "status":
  20. return max(_get_gamepad_axis(_pad, "value", _axis) * _direction, 0) > _threshold;
  21. case "pressed":
  22. var _prev; try { _prev = _prev_axis[$ _pad][$ _axis][$ _direction]; } catch(e) { _prev = 0; };
  23. return !_prev && _get_gamepad_axis(_pad, "status", _axis, _direction, _threshold);
  24. case "released":
  25. var _prev; try { _prev = _prev_axis[$ _pad][$ _axis][$ _direction]; } catch(e) { _prev = 0; };
  26. return _prev && !_get_gamepad_axis(_pad, "status", _axis, _direction, _threshold);
  27. }
  28. }
  29. self._get_gamepad_axis = _get_gamepad_axis
  30. self._prev_axis = {};
  31. var end_step_update = function() {
  32. // Clear and recreate Prev
  33. _prev_axis = {};
  34. if (variable_global_exists("gamepads_list")) {
  35. var pads = global.gamepads_list;
  36. var pad_count = array_length(pads);
  37. for (var i = 0; i < pad_count; i++) {
  38. var _pad = pads[i];
  39. if (_prev_axis[$ _pad] == undefined) {
  40. _prev_axis[$ _pad] = {};
  41. }
  42. var axes = [gp_axislh, gp_axislv, gp_axisrh, gp_axisrv];
  43. var axis_count = array_length(axes);
  44. for (var j = 0; j < axis_count; j++) {
  45. var _axis = axes[j];
  46. if (_prev_axis[$ _pad][$ _axis] == undefined) {
  47. _prev_axis[$ _pad][$ _axis] = {};
  48. }
  49. var dirs = [1, -1];
  50. var dir_count = array_length(dirs);
  51. for (var k = 0; k < dir_count; k++) {
  52. var _direction = dirs[k];
  53. _prev_axis[$ _pad][$ _axis][$ _direction] = _get_gamepad_axis(_pad, "status", _axis, _direction, 0.4);
  54. }
  55. }
  56. }
  57. }
  58. };
  59. self.end_step_update = end_step_update;
  60. }