From 43b163fbd90dace43aad4fa10b8bf26992497c20 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Wed, 21 Sep 2022 13:56:57 -0500 Subject: [PATCH] Make snap turns more reliable, and avoid queuing unnecessary direction removal. --- src/navigation.rs | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/navigation.rs b/src/navigation.rs index 0af6a74..922361c 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -58,7 +58,7 @@ struct SnapTimer(Timer); impl Default for SnapTimer { fn default() -> Self { - Self(Timer::from_seconds(0.25, false)) + Self(Timer::from_seconds(0.2, false)) } } @@ -171,8 +171,9 @@ fn snap( >, ) -> Result<(), Box> { for (entity, actions, mut transform, mut velocity, direction) in query.iter_mut() { - if actions.just_pressed(NavigationAction::SnapLeft) { - println!("snap left"); + if snap_timers.contains_key(&entity) { + continue; + } else if actions.pressed(NavigationAction::SnapLeft) { snap_timers.insert(entity, SnapTimer::default()); transform.rotation = Quat::from_rotation_z(match direction { CardinalDirection::North => PI, @@ -181,9 +182,7 @@ fn snap( CardinalDirection::West => -PI / 2., }); velocity.angvel = 0.; - } - if actions.just_pressed(NavigationAction::SnapRight) { - println!("Snap right"); + } else if actions.pressed(NavigationAction::SnapRight) { snap_timers.insert(entity, SnapTimer::default()); transform.rotation = Quat::from_rotation_z(match direction { CardinalDirection::North => 0., @@ -192,18 +191,15 @@ fn snap( CardinalDirection::West => PI / 2., }); velocity.angvel = 0.; - } - if actions.just_pressed(NavigationAction::SnapCardinal) { + } else if actions.pressed(NavigationAction::SnapReverse) { snap_timers.insert(entity, SnapTimer::default()); + transform.rotate(Quat::from_rotation_z(PI)); + velocity.angvel = 0.; + } else if actions.pressed(NavigationAction::SnapCardinal) { let yaw: Angle = direction.into(); let yaw = yaw.radians(); transform.rotation = Quat::from_rotation_z(yaw); - velocity.angvel = 0.; tts.speak(direction.to_string(), true)?; - } - if actions.just_pressed(NavigationAction::SnapReverse) { - snap_timers.insert(entity, SnapTimer::default()); - transform.rotate(Quat::from_rotation_z(PI)); velocity.angvel = 0.; } } @@ -237,11 +233,17 @@ fn update_direction( } } -fn remove_direction(mut commands: Commands, removed: RemovedComponents) { +fn remove_direction( + mut commands: Commands, + removed: RemovedComponents, + directions: Query<&CardinalDirection>, +) { for entity in removed.iter() { - commands.run_if_exists(entity, |mut entity| { - entity.remove::(); - }); + if directions.contains(entity) { + commands.run_if_exists(entity, |mut entity| { + entity.remove::(); + }); + } } }