From dfb49d04b12aaa49d596f23af53ac5c513672a87 Mon Sep 17 00:00:00 2001 From: zefad Date: Thu, 17 Sep 2026 23:22:34 +0200 Subject: [PATCH] single to query --- src/player.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/player.rs b/src/player.rs index 20d94b5..35b6bc3 100644 --- a/src/player.rs +++ b/src/player.rs @@ -8,6 +8,7 @@ const FALL_SPEED: f32 = 600.0; // Falling speed const DIVE_SPEED: f32 = 1000.0; // Falling speed sped up const HORIZONTAL_SPEED: f32 = 350.0; // Lateral movement speed pub const START_POSITION: Vec3 = Vec3::new(0.0, 0.0, 2.0); // Start position +const RATE: f32 = 13.0; // Inertia rate // The player #[derive(Component)] @@ -66,7 +67,8 @@ pub(crate) fn move_player( 0.0 }; - velocity.0 = Vec2::new( + let facteur = 1.0 - (-RATE * time.delta_secs()).exp(); + let target = Vec2::new( direction * HORIZONTAL_SPEED, -if input.pressed(KeyCode::KeyS) { DIVE_SPEED @@ -75,24 +77,28 @@ pub(crate) fn move_player( }, ); + velocity.0 = velocity.0.lerp(target, facteur); + // Position update (no smoothness in velocity) transform.translation += velocity.0.extend(0.0) * time.delta_secs(); } // Reset player position pub fn reset_player( - mut player: Single<(&mut Transform, &mut Sprite), With>, + mut player: Single<(&mut Transform, &mut Velocity, &mut Sprite), With>, input: Res>, mut has_collided: ResMut, mut fall_started: ResMut, mut regenerate_obstacles: ResMut, ) { - let (mut transform, mut sprite) = player.into_inner(); + let (mut transform, mut velocity, mut sprite) = player.into_inner(); // R key for reset or player has collider if input.just_pressed(KeyCode::KeyR) || has_collided.0 { transform.translation = Vec3::new(START_POSITION.x, START_POSITION.y, START_POSITION.z); + velocity.0 = Vec2::ZERO; sprite.color = Color::WHITE; + has_collided.0 = false; fall_started.0 = false; regenerate_obstacles.0 = true;