spacorium/src/ships/player.rs
2025-11-15 10:32:49 +05:00

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;
}