feat: Player is now using leafwing-input-manager

This commit is contained in:
Alexey 2026-03-03 16:49:28 +03:00
commit 957717671a
4 changed files with 68 additions and 24 deletions

View file

@ -1,4 +1,7 @@
use bevy::prelude::*;
use leafwing_input_manager::prelude::*;
use crate::InputAction as Action;
#[derive(Component)]
pub struct Player {
@ -14,6 +17,7 @@ fn player_bundle(asset_server: &Res<AssetServer>) -> impl Bundle {
},
Sprite::from_image(image),
Transform::from_xyz(0f32, 0f32, 1f32),
Action::default_input_map(),
)
}
@ -22,20 +26,16 @@ pub fn setup_player(mut commands: Commands, asset_server: Res<AssetServer>) {
}
pub fn handle_input(
key_input: Res<ButtonInput<KeyCode>>,
time: Res<Time>,
player: Query<(&Player, &mut Transform, &mut Sprite)>,
mut player: Query<(&Player, &ActionState<Action>, &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!() };
let player = player.single_mut().expect("Player should be single");
let (Player {speed}, action_state, mut transform, mut sprite) = player;
let direction = action_state.clamped_value(&Action::Move);
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;
}
transform.translation.x += direction * speed * time.delta_secs();
if direction != 0f32 {
sprite.flip_x = direction < 0f32;
}
}