From f3597dcf0b76ae51532ad0cbd16e423f0d7af34b Mon Sep 17 00:00:00 2001 From: extrawurst Date: Sun, 16 Mar 2025 00:07:13 +0100 Subject: [PATCH] try fix slow rotation drift --- src/controls.rs | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/controls.rs b/src/controls.rs index ec0e3f9..b6b604a 100644 --- a/src/controls.rs +++ b/src/controls.rs @@ -31,6 +31,13 @@ pub fn plugin(app: &mut App) { app.add_systems(Update, gamepad_connections.run_if(on_event::)); } +fn clamp_vec2(v: Vec2, min: f32) -> Vec2 { + Vec2::new( + if v.x.abs() < min { 0. } else { v.x }, + if v.y.abs() < min { 0. } else { v.y }, + ) +} + fn gamepad_controls( mut commands: Commands, gamepads: Query<(Entity, &Gamepad)>, @@ -49,10 +56,9 @@ fn gamepad_controls( .get(GamepadButton::RightTrigger2) .unwrap_or_default(); - const EPSILON: f32 = 0.015; - //8BitDo Ultimate wireless Controller for PC let look_dir = if gamepad.vendor_id() == Some(11720) && gamepad.product_id() == Some(12306) { + const EPSILON: f32 = 0.015; Vec2::new( if rotate < 0.5 - EPSILON { 40. * (rotate - 0.5) @@ -64,7 +70,7 @@ fn gamepad_controls( 0., ) } else { - gamepad.right_stick() * 40. + clamp_vec2(gamepad.right_stick(), 0.01) * 40. }; let state = ControlState { @@ -149,20 +155,26 @@ fn gamepad_connections(mut evr_gamepad: EventReader) { let GamepadEvent::Connection(ev_conn) = ev else { continue; }; - match &ev_conn.connection { - GamepadConnection::Connected { - name, - vendor_id, - product_id, - } => { - info!( - "New gamepad connected: {:?}, name: {name}, vendor: {vendor_id:?}, product: {product_id:?}", - ev_conn.gamepad - ); - } - GamepadConnection::Disconnected => { - info!("Lost connection with gamepad: {:?}", ev_conn.gamepad); + match ev { + GamepadEvent::Connection(connection) => match &connection.connection { + GamepadConnection::Connected { + name, + vendor_id, + product_id, + } => { + info!( + "New gamepad connected: {:?}, name: {name}, vendor: {vendor_id:?}, product: {product_id:?}", + ev_conn.gamepad + ); + } + GamepadConnection::Disconnected => { + info!("Lost connection with gamepad: {:?}", ev_conn.gamepad); + } + }, + GamepadEvent::Button(gamepad_button_changed_event) => { + info!("Gamepad Button: {:?}", gamepad_button_changed_event); } + _ => {} } } }