233 lines
9.2 KiB
Odin
233 lines
9.2 KiB
Odin
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="SDL_", 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 ---
|
|
} |