Fix up sync gamepad code

This commit is contained in:
zaubentrucker 2025-02-20 20:04:37 +01:00
parent 0199799633
commit 2e909d6217

View file

@ -26,10 +26,12 @@ pub enum GamepadEvent {
/// Example:
/// ```rust
///
/// let jogger = jogger::Jogger::new().await.unwrap();
/// use red::gamepad;
/// let mut jogger = gamepad::Gamepad::new().unwrap();
/// loop {
/// tokio::time::sleep(Duration::from_secs(2)).await;
/// let setpoint = jogger.speed_setpoint();
/// std::thread::sleep(std::time::Duration::from_secs(2));
/// let events = jogger.get_pending();
/// let setpoint = jogger.speed_set_point(&events);
/// println!(
/// "speed setpoint: {} {} {}",
/// setpoint.0, setpoint.1, setpoint.2
@ -68,29 +70,28 @@ impl Gamepad {
.and_then(|event| Self::map_event(event))
}
// Get all `GamepadEvent`s since the last call
/// Get all `GamepadEvent`s since the last call
pub fn get_pending(&mut self) -> Vec<GamepadEvent> {
(0..).map_while(|_| self.get_next()).collect()
}
/// Update the current speed via the movements on the controller and return the current setpoint
/// Update the current speed via the movements on the controller and return the current set
/// point
///
/// If you don't want to update, just supply an empty `updates` slice
pub fn speed_setpoint(&mut self, updates: &[GamepadEvent]) -> (f32, f32, f32) {
pub fn speed_set_point(&mut self, updates: &[GamepadEvent]) -> (f32, f32, f32) {
for event in updates {
match event {
GamepadEvent::TerminatePressed => break,
GamepadEvent::AxisPosition(axis, value) => {
// I won't panic if you don't panic!
let mut speed_setpoint = self.speed_setpoint;
match axis {
Axis::X => speed_setpoint.0 = *value,
Axis::Y => speed_setpoint.1 = *value,
Axis::X => self.speed_setpoint.0 = *value,
Axis::Y => self.speed_setpoint.1 = *value,
Axis::ZPositive => {
speed_setpoint.2 = *value;
self.speed_setpoint.2 = *value;
}
Axis::ZNegative => {
speed_setpoint.3 = *value;
self.speed_setpoint.3 = *value;
}
}
}