From 52d8e8db3b39448cdc1fff87a649c69717ff76f9 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Mon, 21 Mar 2022 22:06:09 -0500 Subject: [PATCH] Clear angular velocity when snapping. --- src/navigation.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/navigation.rs b/src/navigation.rs index 4417ca6..fc01536 100644 --- a/src/navigation.rs +++ b/src/navigation.rs @@ -222,7 +222,14 @@ fn snap( input: Res>, config: Res>, mut snapping: ResMut, - mut position: Query<(&mut RigidBodyPositionComponent, &CardinalDirection), With>, + mut query: Query< + ( + &mut RigidBodyPositionComponent, + &mut RigidBodyVelocityComponent, + &CardinalDirection, + ), + With, + >, ) -> Result<(), Box> where S: bevy::ecs::component::Component + Clone + Debug + Eq + Hash, @@ -230,7 +237,7 @@ where { if let Some(action) = config.action_snap_left.clone() { if input.just_active(action) { - for (mut position, direction) in position.iter_mut() { + for (mut position, mut velocity, direction) in query.iter_mut() { **snapping = true; position.position.rotation = UnitComplex::new(match direction { CardinalDirection::North => PI, @@ -238,12 +245,13 @@ where CardinalDirection::South => 0., CardinalDirection::West => PI * 1.5, }); + velocity.angvel = 0.; } } } if let Some(action) = config.action_snap_right.clone() { if input.just_active(action) { - for (mut position, direction) in position.iter_mut() { + for (mut position, mut velocity, direction) in query.iter_mut() { **snapping = true; position.position.rotation = UnitComplex::new(match direction { CardinalDirection::North => 0., @@ -251,25 +259,28 @@ where CardinalDirection::South => PI, CardinalDirection::West => PI / 2., }); + velocity.angvel = 0.; } } } if let Some(action) = config.action_snap_cardinal.clone() { if input.just_active(action) { - for (mut position, direction) in position.iter_mut() { + for (mut position, mut velocity, direction) in query.iter_mut() { **snapping = true; let yaw: Angle = direction.into(); let yaw = yaw.radians(); position.position.rotation = UnitComplex::new(yaw); + velocity.angvel = 0.; tts.speak(direction.to_string(), true)?; } } } if let Some(action) = config.action_snap_reverse.clone() { if input.just_active(action) { - for (mut position, _) in position.iter_mut() { + for (mut position, mut velocity, _) in query.iter_mut() { **snapping = true; position.position.rotation *= UnitComplex::new(PI); + velocity.angvel = 0.; } } }