use bevy::prelude::*;
use leafwing_input_manager::{prelude::*, user_input::InputKind};
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(InputManagerPlugin::<PlayerAction>::default())
.init_resource::<ActionState<PlayerAction>>()
.insert_resource(PlayerAction::mkb_input_map())
.add_systems(Update, move_player)
.run();
}
#[derive(Actionlike, PartialEq, Eq, Clone, Copy, Hash, Debug, Reflect)]
pub enum PlayerAction {
Move,
Jump,
}
impl PlayerAction {
fn mkb_input_map() -> InputMap<PlayerAction> {
use KeyCode::*;
InputMap::new([
(Self::Jump, UserInput::Single(InputKind::PhysicalKey(Space))),
(Self::Move, UserInput::VirtualDPad(VirtualDPad::wasd())),
])
}
}
fn move_player(
action_state: Res<ActionState<PlayerAction>>,
) {
if action_state.pressed(&PlayerAction::Move) {
let axis_pair = action_state.clamped_axis_pair(&PlayerAction::Move).unwrap();
println!("Move: ({}, {})", axis_pair.x(), axis_pair.y());
}
if action_state.pressed(&PlayerAction::Jump) {
println!("Jumping!");
}
}