|
@@ -0,0 +1,233 @@
|
|
|
|
+package sdl3
|
|
|
|
+
|
|
|
|
+import "core:c"
|
|
|
|
+
|
|
|
|
+Haptic :: struct {}
|
|
|
|
+
|
|
|
|
+HapticType :: Uint16
|
|
|
|
+
|
|
|
|
+HAPTIC_CONSTANT :: 1<<0
|
|
|
|
+HAPTIC_SINE :: 1<<1
|
|
|
|
+HAPTIC_SQUARE :: 1<<2
|
|
|
|
+HAPTIC_TRIANGLE :: 1<<3
|
|
|
|
+HAPTIC_SAWTOOTHUP :: 1<<4
|
|
|
|
+HAPTIC_SAWTOOTHDOWN :: 1<<5
|
|
|
|
+HAPTIC_RAMP :: 1<<6
|
|
|
|
+HAPTIC_SPRING :: 1<<7
|
|
|
|
+HAPTIC_DAMPER :: 1<<8
|
|
|
|
+HAPTIC_INERTIA :: 1<<9
|
|
|
|
+HAPTIC_FRICTION :: 1<<10
|
|
|
|
+HAPTIC_LEFTRIGHT :: 1<<11
|
|
|
|
+HAPTIC_RESERVED1 :: 1<<12
|
|
|
|
+HAPTIC_RESERVED2 :: 1<<13
|
|
|
|
+HAPTIC_RESERVED3 :: 1<<14
|
|
|
|
+HAPTIC_CUSTOM :: 1<<15
|
|
|
|
+HAPTIC_GAIN :: 1<<16
|
|
|
|
+HAPTIC_AUTOCENTER :: 1<<17
|
|
|
|
+HAPTIC_STATUS :: 1<<18
|
|
|
|
+HAPTIC_PAUSE :: 1<<19
|
|
|
|
+
|
|
|
|
+HapticDirectionType :: enum Uint8 {
|
|
|
|
+ POLAR = 0,
|
|
|
|
+ CARTESIAN = 1,
|
|
|
|
+ SPHERICAL = 2,
|
|
|
|
+ STEERING_AXIS = 3,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+HAPTIC_INFINITY :: c.uint(4294967295)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticDirection :: struct {
|
|
|
|
+ type: HapticDirectionType, /**< The type of encoding. */
|
|
|
|
+ dir: [3]Sint32, /**< The encoded direction. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticConstant :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_CONSTANT */
|
|
|
|
+ direction: HapticDirection, /**< Direction of the effect. */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect. */
|
|
|
|
+ delay: Uint16, /**< Delay before starting the effect. */
|
|
|
|
+
|
|
|
|
+ /* Trigger */
|
|
|
|
+ button: Uint16, /**< Button that triggers the effect. */
|
|
|
|
+ interval: Uint16, /**< How soon it can be triggered again after button. */
|
|
|
|
+
|
|
|
|
+ /* Constant */
|
|
|
|
+ level: Sint16, /**< Strength of the constant effect. */
|
|
|
|
+
|
|
|
|
+ /* Envelope */
|
|
|
|
+ attack_length: Uint16, /**< Duration of the attack. */
|
|
|
|
+ attack_level: Uint16, /**< Level at the start of the attack. */
|
|
|
|
+ fade_length: Uint16, /**< Duration of the fade. */
|
|
|
|
+ fade_level: Uint16, /**< Level at the end of the fade. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+HapticPeriodic :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_SINE, HAPTIC_SQUARE
|
|
|
|
+ HAPTIC_TRIANGLE, HAPTIC_SAWTOOTHUP or
|
|
|
|
+ HAPTIC_SAWTOOTHDOWN */
|
|
|
|
+ direction: HapticDirection, /**< Direction of the effect. */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect. */
|
|
|
|
+ delay: Uint16, /**< Delay before starting the effect. */
|
|
|
|
+
|
|
|
|
+ /* Trigger */
|
|
|
|
+ button: Uint16, /**< Button that triggers the effect. */
|
|
|
|
+ interval: Uint16, /**< How soon it can be triggered again after button. */
|
|
|
|
+
|
|
|
|
+ /* Periodic */
|
|
|
|
+ period: Uint16, /**< Period of the wave. */
|
|
|
|
+ magnitude: Sint16, /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */
|
|
|
|
+ offset: Sint16, /**< Mean value of the wave. */
|
|
|
|
+ phase: Uint16, /**< Positive phase shift given by hundredth of a degree. */
|
|
|
|
+
|
|
|
|
+ /* Envelope */
|
|
|
|
+ attack_length: Uint16, /**< Duration of the attack. */
|
|
|
|
+ attack_level: Uint16, /**< Level at the start of the attack. */
|
|
|
|
+ fade_length: Uint16, /**< Duration of the fade. */
|
|
|
|
+ fade_level: Uint16, /**< Level at the end of the fade. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+HapticCondition :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_SPRING, HAPTIC_DAMPER,
|
|
|
|
+ HAPTIC_INERTIA or HAPTIC_FRICTION */
|
|
|
|
+ direction: HapticDirection, /**< Direction of the effect. */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect. */
|
|
|
|
+ delay: Uint16, /**< Delay before starting the effect. */
|
|
|
|
+
|
|
|
|
+ /* Trigger */
|
|
|
|
+ button: Uint16, /**< Button that triggers the effect. */
|
|
|
|
+ interval: Uint16, /**< How soon it can be triggered again after button. */
|
|
|
|
+
|
|
|
|
+ /* Condition */
|
|
|
|
+ right_sat: [3]Uint16, /**< Level when joystick is to the positive side; max 0xFFFF. */
|
|
|
|
+ left_sat: [3]Uint16, /**< Level when joystick is to the negative side; max 0xFFFF. */
|
|
|
|
+ right_coeff: [3]Sint16, /**< How fast to increase the force towards the positive side. */
|
|
|
|
+ left_coeff: [3]Sint16, /**< How fast to increase the force towards the negative side. */
|
|
|
|
+ deadband: [3]Uint16, /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */
|
|
|
|
+ center: [3]Sint16, /**< Position of the dead zone. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+HapticRamp :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_RAMP */
|
|
|
|
+ direction: HapticDirection, /**< Direction of the effect. */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect. */
|
|
|
|
+ delay: Uint16, /**< Delay before starting the effect. */
|
|
|
|
+
|
|
|
|
+ /* Trigger */
|
|
|
|
+ button: Uint16, /**< Button that triggers the effect. */
|
|
|
|
+ interval: Uint16, /**< How soon it can be triggered again after button. */
|
|
|
|
+
|
|
|
|
+ /* Ramp */
|
|
|
|
+ start: Sint16, /**< Beginning strength level. */
|
|
|
|
+ end: Sint16, /**< Ending strength level. */
|
|
|
|
+
|
|
|
|
+ /* Envelope */
|
|
|
|
+ attack_length: Uint16, /**< Duration of the attack. */
|
|
|
|
+ attack_level: Uint16, /**< Level at the start of the attack. */
|
|
|
|
+ fade_length: Uint16, /**< Duration of the fade. */
|
|
|
|
+ fade_level: Uint16, /**< Level at the end of the fade. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticLeftRight :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_LEFTRIGHT */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect in milliseconds. */
|
|
|
|
+
|
|
|
|
+ /* Rumble */
|
|
|
|
+ large_magnitude: Uint16, /**< Control of the large controller motor. */
|
|
|
|
+ small_magnitude: Uint16, /**< Control of the small controller motor. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticCustom :: struct {
|
|
|
|
+ /* Header */
|
|
|
|
+ type: HapticType, /**< HAPTIC_CUSTOM */
|
|
|
|
+ direction: HapticDirection, /**< Direction of the effect. */
|
|
|
|
+
|
|
|
|
+ /* Replay */
|
|
|
|
+ length: Uint32, /**< Duration of the effect. */
|
|
|
|
+ delay: Uint16, /**< Delay before starting the effect. */
|
|
|
|
+
|
|
|
|
+ /* Trigger */
|
|
|
|
+ button: Uint16, /**< Button that triggers the effect. */
|
|
|
|
+ interval: Uint16, /**< How soon it can be triggered again after button. */
|
|
|
|
+
|
|
|
|
+ /* Custom */
|
|
|
|
+ channels: Uint8, /**< Axes to use, minimum of one. */
|
|
|
|
+ period: Uint16, /**< Sample periods. */
|
|
|
|
+ samples: Uint16, /**< Amount of samples. */
|
|
|
|
+ data: [^]Uint16, /**< Should contain channels*samples items. */
|
|
|
|
+
|
|
|
|
+ /* Envelope */
|
|
|
|
+ attack_length: Uint16, /**< Duration of the attack. */
|
|
|
|
+ attack_level: Uint16, /**< Level at the start of the attack. */
|
|
|
|
+ fade_length: Uint16, /**< Duration of the fade. */
|
|
|
|
+ fade_level: Uint16, /**< Level at the end of the fade. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticEffect :: struct #raw_union {
|
|
|
|
+ /* Common for all force feedback effects */
|
|
|
|
+ type: HapticType, /**< Effect type. */
|
|
|
|
+ constant: HapticConstant, /**< Constant effect. */
|
|
|
|
+ periodic: HapticPeriodic, /**< Periodic effect. */
|
|
|
|
+ condition: HapticCondition, /**< Condition effect. */
|
|
|
|
+ ramp: HapticRamp, /**< Ramp effect. */
|
|
|
|
+ leftright: HapticLeftRight, /**< Left/Right effect. */
|
|
|
|
+ custom: HapticCustom, /**< Custom effect. */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+HapticID :: distinct Uint32
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+@(default_calling_convention="c", link_prefix="", require_results)
|
|
|
|
+foreign lib {
|
|
|
|
+ GetHaptics :: proc(count: ^c.int) -> ^HapticID ---
|
|
|
|
+ GetHapticNameForID :: proc(instance_id: HapticID) -> cstring ---
|
|
|
|
+ OpenHaptic :: proc(instance_id: HapticID) -> ^Haptic ---
|
|
|
|
+ GetHapticFromID :: proc(instance_id: HapticID) -> ^Haptic ---
|
|
|
|
+ GetHapticID :: proc(haptic: ^Haptic) -> HapticID ---
|
|
|
|
+ GetHapticName :: proc(haptic: ^Haptic) -> cstring ---
|
|
|
|
+ IsMouseHaptic :: proc() -> bool ---
|
|
|
|
+ OpenHapticFromMouse :: proc() -> ^Haptic ---
|
|
|
|
+ IsJoystickHaptic :: proc(joystick: ^Joystick) -> bool ---
|
|
|
|
+ OpenHapticFromJoystick :: proc(joystick: ^Joystick) -> ^Haptic ---
|
|
|
|
+ CloseHaptic :: proc(haptic: ^Haptic) ---
|
|
|
|
+ GetMaxHapticEffects :: proc(haptic: ^Haptic) -> c.int ---
|
|
|
|
+ GetMaxHapticEffectsPlaying :: proc(haptic: ^Haptic) -> c.int ---
|
|
|
|
+ GetHapticFeatures :: proc(haptic: ^Haptic) -> Uint32 ---
|
|
|
|
+ GetNumHapticAxes :: proc(haptic: ^Haptic) -> c.int ---
|
|
|
|
+ HapticEffectSupported :: proc(haptic: ^Haptic, #by_ptr effect: HapticEffect) -> bool ---
|
|
|
|
+ CreateHapticEffect :: proc(haptic: ^Haptic, #by_ptr effect: HapticEffect) -> c.int ---
|
|
|
|
+ UpdateHapticEffect :: proc(haptic: ^Haptic, effect: c.int, #by_ptr data: HapticEffect) -> bool ---
|
|
|
|
+ RunHapticEffect :: proc(haptic: ^Haptic, effect: c.int, iterations: Uint32) -> bool ---
|
|
|
|
+ StopHapticEffect :: proc(haptic: ^Haptic, effect: c.int) -> bool ---
|
|
|
|
+ DestroyHapticEffect :: proc(haptic: ^Haptic, effect: c.int) ---
|
|
|
|
+ GetHapticEffectStatus :: proc(haptic: ^Haptic, effect: c.int) -> bool ---
|
|
|
|
+ SetHapticGain :: proc(haptic: ^Haptic, gain: c.int) -> bool ---
|
|
|
|
+ SetHapticAutocenter :: proc(haptic: ^Haptic, autocenter: c.int) -> bool ---
|
|
|
|
+ PauseHaptic :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+ ResumeHaptic :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+ StopHapticEffects :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+ HapticRumbleSupported :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+ InitHapticRumble :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+ PlayHapticRumble :: proc(haptic: ^Haptic, strength: f32, length: Uint32) -> bool ---
|
|
|
|
+ StopHapticRumble :: proc(haptic: ^Haptic) -> bool ---
|
|
|
|
+}
|