feat: Player, assets and basic movement

This commit is contained in:
Alexey 2026-02-12 17:09:57 +03:00
commit 10afe6fd08
22 changed files with 87 additions and 55 deletions

41
src/player.rs Normal file
View file

@ -0,0 +1,41 @@
use bevy::prelude::*;
#[derive(Component)]
pub struct Player {
// px/s
speed: f32,
}
fn player_bundle(asset_server: &Res<AssetServer>) -> impl Bundle {
let image = asset_server.load("sprites/player/player.png");
(
Player {
speed: 51.2,
},
Sprite::from_image(image),
Transform::from_xyz(0f32, 0f32, 1f32),
)
}
pub fn setup_player(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.spawn(player_bundle(&asset_server));
}
pub fn handle_input(
key_input: Res<ButtonInput<KeyCode>>,
time: Res<Time>,
player: Query<(&Player, &mut Transform, &mut Sprite)>,
) {
let exclusive_pressed = key_input.pressed(KeyCode::KeyA) != key_input.pressed(KeyCode::KeyD);
let direction = if !exclusive_pressed { 0f32 }
else if key_input.pressed(KeyCode::KeyA) { -1f32 }
else if key_input.pressed(KeyCode::KeyD) { 1f32 }
else { unreachable!() };
for (Player {speed}, mut transform, mut sprite) in player {
transform.translation.x += direction * speed * time.delta_secs();
if direction != 0f32 {
sprite.flip_x = direction < 0f32;
}
}
}