Module gilrs::ff
[−]
[src]
Force feedback module.
To use force feedback, you have to create one or more Effect
s. Each
Effect
contains one or more BasicEffect
s and parameters that
describe effect's source, like it's position, gain or used
DistanceModel
. Final strength of effect is based on saturating sum
(to u16::MAX
) of all base effects and time from the start of playback, attenuation from
distance between effect source and listener (represented by gamepad) and effect's gain.
See also Gilrs::set_listener_position()
and Gamepad::is_ff_supported()
.
Example
use gilrs::Gilrs; use gilrs::ff::{EffectBuilder, Replay, BaseEffect, BaseEffectType, Ticks}; let mut gilrs = Gilrs::new(); let support_ff = gilrs .gamepads() .filter_map(|(id, gp)| if gp.is_ff_supported() { Some(id) } else { None }) .collect::<Vec<_>>(); let duration = Ticks::from_ms(150); let effect = EffectBuilder::new() .add_effect(BaseEffect { kind: BaseEffectType::Strong { magnitude: 60_000 }, scheduling: Replay { play_for: duration, with_delay: duration * 3, ..Default::default() }, envelope: Default::default(), }) .add_effect(BaseEffect { kind: BaseEffectType::Weak { magnitude: 60_000 }, scheduling: Replay { after: duration * 2, play_for: duration, with_delay: duration * 3 }, ..Default::default() }) .gamepads(&support_ff) .finish(&mut gilrs).unwrap(); effect.play().unwrap();
See examples/ff_pos.rs
for
more advanced example.
Structs
BaseEffect |
Basic building block used to create more complex force feedback effects. |
Effect |
Handle to force feedback effect. |
EffectBuilder |
Creates new |
Envelope |
Envelope shaped attenuation(time) function. |
Replay |
Defines scheduling of the basic force feedback effect. |
Ticks |
Represents duration. |
Enums
BaseEffectType |
Kind of |
DistanceModel |
Specifies how distance between effect source and listener attenuates effect. |
DistanceModelError |
Error that can be returned when passing |
Error |
Basic error type in force feedback module. |
Repeat |
Describes how long effect should be played. |