Struct gilrs::Gamepad
[−]
[src]
pub struct Gamepad { /* fields omitted */ }
Represents game controller.
Using this struct you can access cached gamepad state, informations about gamepad such as name or UUID and manage force feedback effects.
Methods
impl Gamepad
[src]
fn name(&self) -> &str
Returns gamepad's name.
fn uuid(&self) -> Uuid
Returns gamepad's UUID.
fn state(&self) -> &GamepadState
Returns cached gamepad state.
Every time you use Gilrs::poll_events()
gamepad state is updated. You can use it to know
if some button is pressed or to get axis's value.
use gilrs::{Gilrs, Button, Axis}; let mut gilrs = Gilrs::new(); loop { for _ in gilrs.poll_events() {} println!("Start: {}, Left Stick X: {}", gilrs[0].is_btn_pressed(Button::Start), gilrs[0].axis_val(Axis::LeftStickX)); }Run
fn status(&self) -> Status
Returns current gamepad's status, which can be Connected
, Disconnected
or NotObserved
.
Only connected gamepads generate events. Disconnected gamepads retain their name and UUID.
Cached state of disconnected and not observed gamepads is 0 (false for buttons and 0.0 for
axis) and all actions preformed on such gamepad are no-op.
fn is_connected(&self) -> bool
Returns true if gamepad is connected.
fn is_btn_pressed(&self, btn: Button) -> bool
Examines cached gamepad state to check if given button is pressed. If btn
can also be
represented by axis returns true if value is not equal to 0.0.
fn axis_val(&self, axis: Axis) -> f32
Examines cached gamepad state to check axis's value. If axis
is represented by button on
device it value is 0.0 if button is not pressed or 1.0 if is pressed.
fn power_info(&self) -> PowerInfo
Returns device's power supply state. See PowerInfo
for details.
fn add_ff_effect(&mut self, data: EffectData) -> Result<usize, Error>
Creates and uploads new force feedback effect using data
. This function will fail if
device doesn't have space for new effect or doesn't support requested effect. Returns
effect's index.
use gilrs::ff::EffectData; use gilrs::Gilrs; let mut gilrs = Gilrs::new(); let mut effect = EffectData::default(); effect.period = 1000; effect.magnitude = 20000; effect.replay.length = 5000; effect.envelope.attack_length = 1000; effect.envelope.fade_length = 1000; let effect_idx = gilrs.gamepad_mut(0).add_ff_effect(effect).unwrap(); gilrs.gamepad_mut(0).ff_effect(effect_idx).unwrap().play(1);Run
fn drop_ff_effect(&mut self, idx: usize)
Drop effect stopping it. Use this function to make space for new effects.
fn ff_effect(&mut self, idx: usize) -> Option<&mut Effect>
Borrows mutable Effect
.
fn max_ff_effects(&self) -> usize
Returns how many force feedback effects device can have.
fn is_ff_supported(&self) -> bool
Returns true if force feedback is supported by device.
fn set_ff_gain(&mut self, gain: u16)
Sets master gain for device.