sdl_gamecontroller.odin 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package sdl2
  2. import "core:c"
  3. when ODIN_OS == .Windows {
  4. foreign import lib "SDL2.lib"
  5. } else {
  6. foreign import lib "system:SDL2"
  7. }
  8. GameController :: struct {}
  9. GameControllerType :: enum c.int {
  10. UNKNOWN = 0,
  11. XBOX360,
  12. XBOXONE,
  13. PS3,
  14. PS4,
  15. NINTENDO_SWITCH_PRO,
  16. VIRTUAL,
  17. PS5,
  18. AMAZON_LUNA,
  19. GOOGLE_STADIA,
  20. }
  21. GameControllerBindType :: enum c.int {
  22. NONE = 0,
  23. BUTTON,
  24. AXIS,
  25. HAT,
  26. }
  27. GameControllerButtonBind :: struct {
  28. bindType: GameControllerBindType,
  29. value: struct #raw_union {
  30. button: c.int,
  31. axis: c.int,
  32. hat: struct {
  33. hat: c.int,
  34. hat_mask: c.int,
  35. },
  36. },
  37. }
  38. GameControllerAxis :: enum c.int {
  39. INVALID = -1,
  40. LEFTX,
  41. LEFTY,
  42. RIGHTX,
  43. RIGHTY,
  44. TRIGGERLEFT,
  45. TRIGGERRIGHT,
  46. MAX,
  47. }
  48. GameControllerButton :: enum c.int {
  49. INVALID = -1,
  50. A,
  51. B,
  52. X,
  53. Y,
  54. BACK,
  55. GUIDE,
  56. START,
  57. LEFTSTICK,
  58. RIGHTSTICK,
  59. LEFTSHOULDER,
  60. RIGHTSHOULDER,
  61. DPAD_UP,
  62. DPAD_DOWN,
  63. DPAD_LEFT,
  64. DPAD_RIGHT,
  65. MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */
  66. PADDLE1, /* Xbox Elite paddle P1 */
  67. PADDLE2, /* Xbox Elite paddle P3 */
  68. PADDLE3, /* Xbox Elite paddle P2 */
  69. PADDLE4, /* Xbox Elite paddle P4 */
  70. TOUCHPAD, /* PS4/PS5 touchpad button */
  71. MAX,
  72. }
  73. GameControllerAddMappingsFromFile :: #force_inline proc "c" (file: cstring) -> c.int {
  74. return GameControllerAddMappingsFromRW(RWFromFile(file, "rb"), true)
  75. }
  76. @(default_calling_convention="c", link_prefix="SDL_")
  77. foreign lib {
  78. GameControllerAddMappingsFromRW :: proc(rw: ^RWops, freerw: bool) -> c.int ---
  79. GameControllerAddMapping :: proc(mappingString: cstring) -> c.int ---
  80. GameControllerNumMappings :: proc() -> c.int ---
  81. GameControllerMappingForIndex :: proc(mapping_index: c.int) -> cstring ---
  82. GameControllerMappingForGUID :: proc(guid: JoystickGUID) -> cstring ---
  83. GameControllerMapping :: proc(gamecontroller: ^GameController) -> cstring ---
  84. IsGameController :: proc(joystick_index: c.int) -> bool ---
  85. GameControllerNameForIndex :: proc(joystick_index: c.int) -> cstring ---
  86. GameControllerTypeForIndex :: proc(joystick_index: c.int) -> GameControllerType ---
  87. GameControllerMappingForDeviceIndex :: proc(joystick_index: c.int) -> cstring ---
  88. GameControllerOpen :: proc(joystick_index: c.int) -> ^GameController ---
  89. GameControllerFromInstanceID :: proc(joyid: JoystickID) -> ^GameController ---
  90. GameControllerFromPlayerIndex :: proc(player_index: c.int) -> ^GameController ---
  91. GameControllerName :: proc(gamecontroller: ^GameController) -> cstring ---
  92. GameControllerGetType :: proc(gamecontroller: ^GameController) -> GameControllerType ---
  93. GameControllerGetPlayerIndex :: proc(gamecontroller: ^GameController) -> c.int ---
  94. GameControllerSetPlayerIndex :: proc(gamecontroller: ^GameController, player_index: c.int) ---
  95. GameControllerGetVendor :: proc(gamecontroller: ^GameController) -> u16 ---
  96. GameControllerGetProduct :: proc(gamecontroller: ^GameController) -> u16 ---
  97. GameControllerGetProductVersion :: proc(gamecontroller: ^GameController) -> u16 ---
  98. GameControllerGetSerial :: proc(gamecontroller: ^GameController) -> cstring ---
  99. GameControllerGetAttached :: proc(gamecontroller: ^GameController) -> bool ---
  100. GameControllerGetJoystick :: proc(gamecontroller: ^GameController) -> ^Joystick ---
  101. GameControllerEventState :: proc(state: c.int) -> c.int ---
  102. GameControllerUpdate :: proc() ---
  103. GameControllerGetAxisFromString :: proc(str: cstring) -> GameControllerAxis ---
  104. GameControllerGetStringForAxis :: proc(axis: GameControllerAxis) -> cstring ---
  105. GameControllerGetBindForAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> GameControllerButtonBind---
  106. GameControllerHasAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> bool ---
  107. GameControllerGetAxis :: proc(gamecontroller: ^GameController, axis: GameControllerAxis) -> i16 ---
  108. GameControllerGetButtonFromString :: proc(str: cstring) -> GameControllerButton ---
  109. GameControllerGetStringForButton :: proc(button: GameControllerButton) -> cstring ---
  110. GameControllerGetBindForButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> GameControllerButtonBind ---
  111. GameControllerHasButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> bool ---
  112. GameControllerGetButton :: proc(gamecontroller: ^GameController, button: GameControllerButton) -> u8 ---
  113. GameControllerGetNumTouchpads :: proc(gamecontroller: ^GameController) -> c.int ---
  114. GameControllerGetNumTouchpadFingers :: proc(gamecontroller: ^GameController, touchpad: c.int) -> c.int ---
  115. GameControllerGetTouchpadFinger :: proc(gamecontroller: ^GameController, touchpad: c.int, finger: c.int, state: ^u8, x, y: ^f32, pressure: ^f32) -> c.int ---
  116. GameControllerHasSensor :: proc(gamecontroller: ^GameController, type: SensorType) -> bool ---
  117. GameControllerSetSensorEnabled :: proc(gamecontroller: ^GameController, type: SensorType, enabled: bool) -> c.int ---
  118. GameControllerIsSensorEnabled :: proc(gamecontroller: ^GameController, type: SensorType) -> bool ---
  119. GameControllerGetSensorDataRate :: proc(gamecontroller: ^GameController, type: SensorType) -> f32 ---
  120. GameControllerGetSensorData :: proc(gamecontroller: ^GameController, type: SensorType, data: [^]f32, num_values: c.int) -> c.int ---
  121. GameControllerRumble :: proc(gamecontroller: ^GameController, low_frequency_rumble, high_frequency_rumble: u16, duration_ms: u32) -> c.int ---
  122. GameControllerRumbleTriggers :: proc(gamecontroller: ^GameController, left_rumble, right_rumble: u16, duration_ms: u32) -> c.int ---
  123. GameControllerHasLED :: proc(gamecontroller: ^GameController) -> bool ---
  124. GameControllerSetLED :: proc(gamecontroller: ^GameController, red, green, blue: u8) -> c.int ---
  125. GameControllerSendEffect :: proc(gamecontroller: ^GameController, data: rawptr, size: c.int) -> c.int ---
  126. GameControllerClose :: proc(gamecontroller: ^GameController) ---
  127. }