use avian3d::prelude::*;
use bevy::log::tracing_subscriber::util::SubscriberInitExt;
use bevy::prelude::{GamepadButtonType, KeyCode};
use bevy::reflect::Reflect;
use leafwing_input_manager::prelude::*;
#[derive(Actionlike, PartialEq, Eq, Hash, Clone, Copy, Debug, Reflect)]
#[actionlike(Button)]
pub enum Action {
StrafePosX,
StrafePosY,
StrafePosZ,
StrafeNegX,
StrafeNegY,
StrafeNegZ,
#[actionlike(DualAxis)]
StrafeXZ,
PosYaw,
NegYaw,
PosPitch,
NegPitch,
PosRoll,
NegRoll,
#[actionlike(DualAxis)]
PitchYaw,
Brake,
Quit,
}
pub fn default_input_map() -> InputMap<Action> {
let mut input_map = InputMap::default();
input_map.insert_dual_axis(Action::StrafeXZ, KeyboardVirtualDPad::WASD);
input_map.insert(Action::Brake, KeyCode::KeyX);
input_map.insert(Action::Brake, GamepadButtonType::South);
input_map.insert_dual_axis(Action::StrafeXZ, GamepadStick::LEFT);
input_map.insert_dual_axis(Action::PitchYaw, GamepadStick::RIGHT);
input_map.insert(Action::PosRoll, GamepadButtonType::RightTrigger);
input_map.insert(Action::NegRoll, GamepadButtonType::LeftTrigger);
input_map.insert(Action::PosRoll, KeyCode::KeyE);
input_map.insert(Action::NegRoll, KeyCode::KeyQ);
input_map.insert(Action::StrafePosY, KeyCode::Space);
input_map.insert(Action::Quit, KeyCode::Escape);
input_map.insert(Action::StrafeNegY, KeyCode::ControlLeft);
input_map
}
pub fn input_bundle() -> InputManagerBundle<Action> {
let input_map = default_input_map();
InputManagerBundle {
action_state: ActionState::default(),
input_map,
}
}