|
@@ -0,0 +1,193 @@
|
|
|
|
+package sdl3
|
|
|
|
+
|
|
|
|
+import "core:c"
|
|
|
|
+
|
|
|
|
+Gamepad :: struct {}
|
|
|
|
+
|
|
|
|
+GamepadType :: enum c.int {
|
|
|
|
+ UNKNOWN = 0,
|
|
|
|
+ STANDARD,
|
|
|
|
+ XBOX360,
|
|
|
|
+ XBOXONE,
|
|
|
|
+ PS3,
|
|
|
|
+ PS4,
|
|
|
|
+ PS5,
|
|
|
|
+ NINTENDO_SWITCH_PRO,
|
|
|
|
+ NINTENDO_SWITCH_JOYCON_LEFT,
|
|
|
|
+ NINTENDO_SWITCH_JOYCON_RIGHT,
|
|
|
|
+ NINTENDO_SWITCH_JOYCON_PAIR,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GamepadButton :: enum c.int {
|
|
|
|
+ INVALID = -1,
|
|
|
|
+ SOUTH, /**< Bottom face button (e.g. Xbox A button) */
|
|
|
|
+ EAST, /**< Right face button (e.g. Xbox B button) */
|
|
|
|
+ WEST, /**< Left face button (e.g. Xbox X button) */
|
|
|
|
+ NORTH, /**< Top face button (e.g. Xbox Y button) */
|
|
|
|
+ BACK,
|
|
|
|
+ GUIDE,
|
|
|
|
+ START,
|
|
|
|
+ LEFT_STICK,
|
|
|
|
+ RIGHT_STICK,
|
|
|
|
+ LEFT_SHOULDER,
|
|
|
|
+ RIGHT_SHOULDER,
|
|
|
|
+ DPAD_UP,
|
|
|
|
+ DPAD_DOWN,
|
|
|
|
+ DPAD_LEFT,
|
|
|
|
+ DPAD_RIGHT,
|
|
|
|
+ MISC1, /**< Additional button (e.g. Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button, Google Stadia capture button) */
|
|
|
|
+ RIGHT_PADDLE1, /**< Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1) */
|
|
|
|
+ LEFT_PADDLE1, /**< Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3) */
|
|
|
|
+ RIGHT_PADDLE2, /**< Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2) */
|
|
|
|
+ LEFT_PADDLE2, /**< Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4) */
|
|
|
|
+ TOUCHPAD, /**< PS4/PS5 touchpad button */
|
|
|
|
+ MISC2, /**< Additional button */
|
|
|
|
+ MISC3, /**< Additional button */
|
|
|
|
+ MISC4, /**< Additional button */
|
|
|
|
+ MISC5, /**< Additional button */
|
|
|
|
+ MISC6, /**< Additional button */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GamepadButtonLabel :: enum c.int {
|
|
|
|
+ UNKNOWN,
|
|
|
|
+ A,
|
|
|
|
+ B,
|
|
|
|
+ X,
|
|
|
|
+ Y,
|
|
|
|
+ CROSS,
|
|
|
|
+ CIRCLE,
|
|
|
|
+ SQUARE,
|
|
|
|
+ TRIANGLE,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GamepadAxis :: enum c.int {
|
|
|
|
+ INVALID = -1,
|
|
|
|
+ LEFTX,
|
|
|
|
+ LEFTY,
|
|
|
|
+ RIGHTX,
|
|
|
|
+ RIGHTY,
|
|
|
|
+ LEFT_TRIGGER,
|
|
|
|
+ RIGHT_TRIGGER,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+GamepadBindingType :: enum c.int {
|
|
|
|
+ NONE = 0,
|
|
|
|
+ BUTTON,
|
|
|
|
+ AXIS,
|
|
|
|
+ HAT,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+GamepadBinding :: struct {
|
|
|
|
+ input_type: GamepadBindingType,
|
|
|
|
+ input: struct #raw_union {
|
|
|
|
+ button: c.int,
|
|
|
|
+
|
|
|
|
+ axis: struct {
|
|
|
|
+ axis: c.int,
|
|
|
|
+ axis_min: c.int,
|
|
|
|
+ axis_max: c.int,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ hat: struct {
|
|
|
|
+ hat: c.int,
|
|
|
|
+ hat_mask: c.int,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ output_type: GamepadBindingType,
|
|
|
|
+ output: struct #raw_union {
|
|
|
|
+ button: GamepadButton,
|
|
|
|
+
|
|
|
|
+ axis: struct {
|
|
|
|
+ axis: GamepadAxis,
|
|
|
|
+ axis_min: c.int,
|
|
|
|
+ axis_max: c.int,
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+PROP_GAMEPAD_CAP_MONO_LED_BOOLEAN :: PROP_JOYSTICK_CAP_MONO_LED_BOOLEAN
|
|
|
|
+PROP_GAMEPAD_CAP_RGB_LED_BOOLEAN :: PROP_JOYSTICK_CAP_RGB_LED_BOOLEAN
|
|
|
|
+PROP_GAMEPAD_CAP_PLAYER_LED_BOOLEAN :: PROP_JOYSTICK_CAP_PLAYER_LED_BOOLEAN
|
|
|
|
+PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN :: PROP_JOYSTICK_CAP_RUMBLE_BOOLEAN
|
|
|
|
+PROP_GAMEPAD_CAP_TRIGGER_RUMBLE_BOOLEAN :: PROP_JOYSTICK_CAP_TRIGGER_RUMBLE_BOOLEAN
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@(default_calling_convention="c", link_prefix="SDL_")
|
|
|
|
+foreign lib {
|
|
|
|
+ AddGamepadMapping :: proc(mapping: cstring) -> c.int ---
|
|
|
|
+ AddGamepadMappingsFromIO :: proc(src: ^IOStream, closeio: bool) -> c.int ---
|
|
|
|
+ AddGamepadMappingsFromFile :: proc(file: cstring) -> c.int ---
|
|
|
|
+ ReloadGamepadMappings :: proc() -> bool ---
|
|
|
|
+ GetGamepadMappings :: proc(count: ^c.int) -> [^][^]byte ---
|
|
|
|
+ GetGamepadMappingForGUID :: proc(guid: GUID) -> [^]byte---
|
|
|
|
+ GetGamepadMapping :: proc(gamepad: ^Gamepad) -> [^]byte ---
|
|
|
|
+ SetGamepadMapping :: proc(instance_id: JoystickID, mapping: cstring) -> bool ---
|
|
|
|
+ HasGamepad :: proc() -> bool ---
|
|
|
|
+ GetGamepads :: proc(count: ^c.int) -> [^]JoystickID ---
|
|
|
|
+ IsGamepad :: proc(instance_id: JoystickID) -> bool ---
|
|
|
|
+ GetGamepadNameForID :: proc(instance_id: JoystickID) -> cstring ---
|
|
|
|
+ GetGamepadPathForID :: proc(instance_id: JoystickID) -> cstring ---
|
|
|
|
+ GetGamepadPlayerIndexForID :: proc(instance_id: JoystickID) -> c.int ---
|
|
|
|
+ GetGamepadGUIDForID :: proc(instance_id: JoystickID) -> GUID ---
|
|
|
|
+ GetGamepadVendorForID :: proc(instance_id: JoystickID) -> Uint16 ---
|
|
|
|
+ GetGamepadProductForID :: proc(instance_id: JoystickID) -> Uint16 ---
|
|
|
|
+ GetGamepadProductVersionForID :: proc(instance_id: JoystickID) -> Uint16 ---
|
|
|
|
+ GetGamepadTypeForID :: proc(instance_id: JoystickID) -> GamepadType ---
|
|
|
|
+ GetRealGamepadTypeForID :: proc(instance_id: JoystickID) -> GamepadType ---
|
|
|
|
+ GetGamepadMappingForID :: proc(instance_id: JoystickID) -> [^]byte ---
|
|
|
|
+ OpenGamepad :: proc(instance_id: JoystickID) -> ^Gamepad ---
|
|
|
|
+ GetGamepadFromID :: proc(instance_id: JoystickID) -> ^Gamepad ---
|
|
|
|
+ GetGamepadFromPlayerIndex :: proc(player_index: c.int) -> ^Gamepad ---
|
|
|
|
+ GetGamepadProperties :: proc(gamepad: ^Gamepad) -> PropertiesID ---
|
|
|
|
+ GetGamepadID :: proc(gamepad: ^Gamepad) -> JoystickID ---
|
|
|
|
+ GetGamepadName :: proc(gamepad: ^Gamepad) -> cstring ---
|
|
|
|
+ GetGamepadPath :: proc(gamepad: ^Gamepad) -> cstring ---
|
|
|
|
+ GetGamepadType :: proc(gamepad: ^Gamepad) -> GamepadType ---
|
|
|
|
+ GetRealGamepadType :: proc(gamepad: ^Gamepad) -> GamepadType ---
|
|
|
|
+ GetGamepadPlayerIndex :: proc(gamepad: ^Gamepad) -> c.int ---
|
|
|
|
+ SetGamepadPlayerIndex :: proc(gamepad: ^Gamepad, player_index: c.int) -> bool ---
|
|
|
|
+ GetGamepadVendor :: proc(gamepad: ^Gamepad) -> Uint16 ---
|
|
|
|
+ GetGamepadProduct :: proc(gamepad: ^Gamepad) -> Uint16 ---
|
|
|
|
+ GetGamepadProductVersion :: proc(gamepad: ^Gamepad) -> Uint16 ---
|
|
|
|
+ GetGamepadFirmwareVersion :: proc(gamepad: ^Gamepad) -> Uint16 ---
|
|
|
|
+ GetGamepadSerial :: proc(gamepad: ^Gamepad) -> cstring ---
|
|
|
|
+ GetGamepadSteamHandle :: proc(gamepad: ^Gamepad) -> Uint64 ---
|
|
|
|
+ GetGamepadConnectionState :: proc(gamepad: ^Gamepad) -> JoystickConnectionState ---
|
|
|
|
+ GetGamepadPowerInfo :: proc(gamepad: ^Gamepad, percent: ^c.int) -> PowerState ---
|
|
|
|
+ GamepadConnected :: proc(gamepad: ^Gamepad) -> bool ---
|
|
|
|
+ GetGamepadJoystick :: proc(gamepad: ^Gamepad) -> ^Joystick ---
|
|
|
|
+ SetGamepadEventsEnabled :: proc(enabled: bool) ---
|
|
|
|
+ GamepadEventsEnabled :: proc() -> bool ---
|
|
|
|
+ GetGamepadBindings :: proc(gamepad: ^Gamepad, count: ^c.int) -> [^]^GamepadBinding ---
|
|
|
|
+ UpdateGamepads :: proc() ---
|
|
|
|
+ GetGamepadTypeFromString :: proc(str: cstring) -> GamepadType ---
|
|
|
|
+ GetGamepadStringForType :: proc(type: GamepadType) -> cstring ---
|
|
|
|
+ GetGamepadAxisFromString :: proc(str: cstring) -> GamepadAxis ---
|
|
|
|
+ GetGamepadStringForAxis :: proc(axis: GamepadAxis) -> cstring ---
|
|
|
|
+ GamepadHasAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> bool ---
|
|
|
|
+ GetGamepadAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> Sint16 ---
|
|
|
|
+ GetGamepadButtonFromString :: proc(str: cstring) -> GamepadButton ---
|
|
|
|
+ GetGamepadStringForButton :: proc(button: GamepadButton) -> cstring ---
|
|
|
|
+ GamepadHasButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> bool ---
|
|
|
|
+ GetGamepadButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> bool ---
|
|
|
|
+ GetGamepadButtonLabelForType :: proc(type: GamepadType, button: GamepadButton) -> GamepadButtonLabel ---
|
|
|
|
+ GetGamepadButtonLabel :: proc(gamepad: ^Gamepad, button: GamepadButton) -> GamepadButtonLabel ---
|
|
|
|
+ GetNumGamepadTouchpads :: proc(gamepad: ^Gamepad) -> c.int ---
|
|
|
|
+ GetNumGamepadTouchpadFingers :: proc(gamepad: ^Gamepad, touchpad: c.int) -> c.int ---
|
|
|
|
+ GetGamepadTouchpadFinger :: proc(gamepad: ^Gamepad, touchpad: c.int, finger: c.int, down: ^bool, x, y: ^f32, pressure: ^f32) -> bool ---
|
|
|
|
+ GamepadHasSensor :: proc(gamepad: ^Gamepad, type: SensorType) -> bool ---
|
|
|
|
+ SetGamepadSensorEnabled :: proc(gamepad: ^Gamepad, type: SensorType, enabled: bool) -> bool ---
|
|
|
|
+ GamepadSensorEnabled :: proc(gamepad: ^Gamepad, type: SensorType) -> bool ---
|
|
|
|
+ GetGamepadSensorDataRate :: proc(gamepad: ^Gamepad, type: SensorType) -> f32 ---
|
|
|
|
+ GetGamepadSensorData :: proc(gamepad: ^Gamepad, type: SensorType, data: [^]f32, num_values: c.int) -> bool ---
|
|
|
|
+ RumbleGamepad :: proc(gamepad: ^Gamepad, low_frequency_rumble, high_frequency_rumble: Uint16, duration_ms: Uint32) -> bool ---
|
|
|
|
+ RumbleGamepadTriggers :: proc(gamepad: ^Gamepad, left_rumble, right_rumble: Uint16, duration_ms: Uint32) -> bool ---
|
|
|
|
+ SetGamepadLED :: proc(gamepad: ^Gamepad, red, green, blue: Uint8) -> bool ---
|
|
|
|
+ SendGamepadEffect :: proc(gamepad: ^Gamepad, data: rawptr, size: c.int) -> bool ---
|
|
|
|
+ CloseGamepad :: proc(gamepad: ^Gamepad) ---
|
|
|
|
+ GetGamepadAppleSFSymbolsNameForButton :: proc(gamepad: ^Gamepad, button: GamepadButton) -> cstring ---
|
|
|
|
+ GetGamepadAppleSFSymbolsNameForAxis :: proc(gamepad: ^Gamepad, axis: GamepadAxis) -> cstring ---
|
|
|
|
+}
|