Working example
This commit is contained in:
193
sdl3/sdl3_gamepad.odin
Normal file
193
sdl3/sdl3_gamepad.odin
Normal file
@@ -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 ---
|
||||
}
|
||||
Reference in New Issue
Block a user