single to query
This commit is contained in:
+9
-3
@@ -8,6 +8,7 @@ const FALL_SPEED: f32 = 600.0; // Falling speed
|
|||||||
const DIVE_SPEED: f32 = 1000.0; // Falling speed sped up
|
const DIVE_SPEED: f32 = 1000.0; // Falling speed sped up
|
||||||
const HORIZONTAL_SPEED: f32 = 350.0; // Lateral movement speed
|
const HORIZONTAL_SPEED: f32 = 350.0; // Lateral movement speed
|
||||||
pub const START_POSITION: Vec3 = Vec3::new(0.0, 0.0, 2.0); // Start position
|
pub const START_POSITION: Vec3 = Vec3::new(0.0, 0.0, 2.0); // Start position
|
||||||
|
const RATE: f32 = 13.0; // Inertia rate
|
||||||
|
|
||||||
// The player
|
// The player
|
||||||
#[derive(Component)]
|
#[derive(Component)]
|
||||||
@@ -66,7 +67,8 @@ pub(crate) fn move_player(
|
|||||||
0.0
|
0.0
|
||||||
};
|
};
|
||||||
|
|
||||||
velocity.0 = Vec2::new(
|
let facteur = 1.0 - (-RATE * time.delta_secs()).exp();
|
||||||
|
let target = Vec2::new(
|
||||||
direction * HORIZONTAL_SPEED,
|
direction * HORIZONTAL_SPEED,
|
||||||
-if input.pressed(KeyCode::KeyS) {
|
-if input.pressed(KeyCode::KeyS) {
|
||||||
DIVE_SPEED
|
DIVE_SPEED
|
||||||
@@ -75,24 +77,28 @@ pub(crate) fn move_player(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
velocity.0 = velocity.0.lerp(target, facteur);
|
||||||
|
|
||||||
// Position update (no smoothness in velocity)
|
// Position update (no smoothness in velocity)
|
||||||
transform.translation += velocity.0.extend(0.0) * time.delta_secs();
|
transform.translation += velocity.0.extend(0.0) * time.delta_secs();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset player position
|
// Reset player position
|
||||||
pub fn reset_player(
|
pub fn reset_player(
|
||||||
mut player: Single<(&mut Transform, &mut Sprite), With<Player>>,
|
mut player: Single<(&mut Transform, &mut Velocity, &mut Sprite), With<Player>>,
|
||||||
input: Res<ButtonInput<KeyCode>>,
|
input: Res<ButtonInput<KeyCode>>,
|
||||||
mut has_collided: ResMut<HasCollided>,
|
mut has_collided: ResMut<HasCollided>,
|
||||||
mut fall_started: ResMut<FallStarted>,
|
mut fall_started: ResMut<FallStarted>,
|
||||||
mut regenerate_obstacles: ResMut<RegenerateObstacles>,
|
mut regenerate_obstacles: ResMut<RegenerateObstacles>,
|
||||||
) {
|
) {
|
||||||
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
|
// R key for reset or player has collider
|
||||||
if input.just_pressed(KeyCode::KeyR) || has_collided.0 {
|
if input.just_pressed(KeyCode::KeyR) || has_collided.0 {
|
||||||
transform.translation = Vec3::new(START_POSITION.x, START_POSITION.y, START_POSITION.z);
|
transform.translation = Vec3::new(START_POSITION.x, START_POSITION.y, START_POSITION.z);
|
||||||
|
velocity.0 = Vec2::ZERO;
|
||||||
sprite.color = Color::WHITE;
|
sprite.color = Color::WHITE;
|
||||||
|
|
||||||
has_collided.0 = false;
|
has_collided.0 = false;
|
||||||
fall_started.0 = false;
|
fall_started.0 = false;
|
||||||
regenerate_obstacles.0 = true;
|
regenerate_obstacles.0 = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user