36 lines
1,003 B
Rust
36 lines
1,003 B
Rust
use crate::movable::Movable;
|
|
use bevy::prelude::*;
|
|
|
|
#[derive(Component)]
|
|
pub struct Player {
|
|
pub(super) acceleration: f32,
|
|
}
|
|
|
|
pub(super) fn player_movement_system(
|
|
time: Res<Time>,
|
|
keyboard_input: Res<ButtonInput<KeyCode>>,
|
|
query: Single<(&mut Movable, &Player)>,
|
|
) {
|
|
let (mut movable, player) = query.into_inner();
|
|
let mut movement_factor = 0.0;
|
|
let mut rotation_factor = 0.0;
|
|
|
|
if keyboard_input.pressed(KeyCode::ArrowLeft) {
|
|
rotation_factor += 1.0;
|
|
}
|
|
|
|
if keyboard_input.pressed(KeyCode::ArrowRight) {
|
|
rotation_factor -= 1.0;
|
|
}
|
|
|
|
if keyboard_input.pressed(KeyCode::ArrowUp) {
|
|
movement_factor += 1.0;
|
|
}
|
|
if keyboard_input.pressed(KeyCode::ArrowDown) {
|
|
movement_factor -= 1.0;
|
|
}
|
|
|
|
movable.linear_speed += (movement_factor * player.acceleration * time.delta_secs())
|
|
.clamp(-movable.max_linear_speed, movable.max_linear_speed);
|
|
movable.rotation_speed = rotation_factor * movable.max_rotation_speed;
|
|
}
|