gingerBill 7 місяців тому
батько
коміт
02fcac195b
1 змінених файлів з 193 додано та 0 видалено
  1. 193 0
      vendor/sdl3/sdl3_gamepad.odin

+ 193 - 0
vendor/sdl3/sdl3_gamepad.odin

@@ -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 ---
+}