joy_mapping.gd 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. class_name JoyMapping
  2. extends RefCounted
  3. enum Type {
  4. NONE,
  5. BTN,
  6. AXIS,
  7. }
  8. enum Axis {
  9. FULL,
  10. HALF_PLUS,
  11. HALF_MINUS,
  12. }
  13. const PLATFORMS = {
  14. # From gamecontrollerdb
  15. "Windows": "Windows",
  16. "OSX": "Mac OS X",
  17. "X11": "Linux",
  18. "Android": "Android",
  19. "iOS": "iOS",
  20. # Godot customs
  21. "HTML5": "Javascript",
  22. "UWP": "UWP",
  23. # 4.x compat
  24. "Linux": "Linux",
  25. "FreeBSD": "Linux",
  26. "NetBSD": "Linux",
  27. "BSD": "Linux",
  28. "macOS": "Mac OS X",
  29. }
  30. const BASE = {
  31. # Buttons
  32. "a": JOY_BUTTON_A,
  33. "b": JOY_BUTTON_B,
  34. "y": JOY_BUTTON_Y,
  35. "x": JOY_BUTTON_X,
  36. "start": JOY_BUTTON_START,
  37. "back": JOY_BUTTON_BACK,
  38. "leftstick": JOY_BUTTON_LEFT_STICK,
  39. "rightstick": JOY_BUTTON_RIGHT_STICK,
  40. "leftshoulder": JOY_BUTTON_LEFT_SHOULDER,
  41. "rightshoulder": JOY_BUTTON_RIGHT_SHOULDER,
  42. "dpup": JOY_BUTTON_DPAD_UP,
  43. "dpleft": JOY_BUTTON_DPAD_LEFT,
  44. "dpdown": JOY_BUTTON_DPAD_DOWN,
  45. "dpright": JOY_BUTTON_DPAD_RIGHT,
  46. # Axis
  47. "leftx": JOY_AXIS_LEFT_X,
  48. "lefty": JOY_AXIS_LEFT_Y,
  49. "rightx": JOY_AXIS_RIGHT_X,
  50. "righty": JOY_AXIS_RIGHT_Y,
  51. "lefttrigger": JOY_AXIS_TRIGGER_LEFT,
  52. "righttrigger": JOY_AXIS_TRIGGER_RIGHT,
  53. }
  54. const XBOX = {
  55. "a": "b0",
  56. "b": "b1",
  57. "y": "b3",
  58. "x": "b2",
  59. "start": "b7",
  60. "guide": "b8",
  61. "back": "b6",
  62. "leftstick": "b9",
  63. "rightstick": "b10",
  64. "leftshoulder": "b4",
  65. "rightshoulder": "b5",
  66. "dpup": "-a7",
  67. "dpleft":"-a6",
  68. "dpdown": "+a7",
  69. "dpright": "+a6",
  70. "leftx": "a0",
  71. "lefty": "a1",
  72. "rightx": "a3",
  73. "righty": "a4",
  74. "lefttrigger": "a2",
  75. "righttrigger": "a5",
  76. }
  77. const XBOX_OSX = {
  78. "a": "b11",
  79. "b": "b12",
  80. "y": "b14",
  81. "x": "b13",
  82. "start": "b4",
  83. "back": "b5",
  84. "leftstick": "b6",
  85. "rightstick": "b7",
  86. "leftshoulder": "b8",
  87. "rightshoulder": "b9",
  88. "dpup": "b0",
  89. "dpleft": "b2",
  90. "dpdown": "b1",
  91. "dpright": "b3",
  92. "leftx": "a0",
  93. "lefty": "a1",
  94. "rightx": "a2",
  95. "righty": "a3",
  96. "lefttrigger": "a4",
  97. "righttrigger":"a5",
  98. }
  99. var type := Type.NONE
  100. var idx := -1
  101. var axis := Axis.FULL
  102. var inverted := false
  103. func _init(p_type: Type = Type.NONE, p_idx: int = -1, p_axis: Axis = Axis.FULL) -> void:
  104. type = p_type
  105. idx = p_idx
  106. axis = p_axis
  107. func _to_string() -> String:
  108. if type == Type.NONE:
  109. return ""
  110. var ts := "b" if type == Type.BTN else "a"
  111. var prefix := ""
  112. var suffix := "~" if inverted else ""
  113. match axis:
  114. Axis.HALF_PLUS:
  115. prefix = "+"
  116. Axis.HALF_MINUS:
  117. prefix = "-"
  118. return "%s%s%d%s" % [prefix, ts, idx, suffix]
  119. func to_human_string() -> String:
  120. if type == Type.BTN:
  121. return "Button %d" % idx
  122. if type == Type.AXIS:
  123. var prefix := ""
  124. match axis:
  125. Axis.HALF_PLUS:
  126. prefix = "(+) "
  127. Axis.HALF_MINUS:
  128. prefix = "(-) "
  129. var suffix := " (inverted)" if inverted else ""
  130. return "Axis %s%d%s" % [prefix, idx, suffix]
  131. return ""