Refactor menu input a bit

This commit is contained in:
2026-09-11 11:38:01 +02:00
parent 3dbda96d31
commit cc850debf2
11 changed files with 282 additions and 189 deletions
+2 -3
View File
@@ -21,9 +21,8 @@ pub fn sample_gamepad(pad: &Gamepad, input_map: &BaseInputMap) -> FighterInputFr
// Digital buttons driving movement isn't used by the
// default bindings (the stick covers that), but stay
// consistent with the keyboard backend if one is added.
InputMapAction::MovementXDir(sign) if pressed => movement.x += sign as f32,
InputMapAction::MovementYDir(sign) if pressed => movement.y += sign as f32,
_ => {}
InputMapAction::MovementXDir(sign) => if pressed { movement.x += sign as f32 },
InputMapAction::MovementYDir(sign) => if pressed { movement.y += sign as f32 },
}
}
// gamepad does not have a separate axis for left and right, so sign here should be 1
+1
View File
@@ -33,6 +33,7 @@ pub fn sample_keyboard(key: &ButtonInput<KeyCode>, input_map: &BaseInputMap) ->
InputMapAction::Jump => input_frame.jump = action_strength != FGi32::ZERO,
InputMapAction::Shield => input_frame.shield = action_strength != FGi32::ZERO,
InputMapAction::Attack => input_frame.attack = action_strength != FGi32::ZERO,
}
}
+27
View File
@@ -19,6 +19,15 @@ pub enum InputMapAction {
Attack,
}
#[derive(Debug)]
pub enum MenuInputMapAction {
MovementXDir(i32),
MovementYDir(i32),
Accept,
Back,
Start,
}
#[derive(Debug)]
pub struct KeyboardInputMapElement {
pub key: KeyCode,
@@ -37,8 +46,26 @@ pub struct GamepadInputMapElement {
pub action: InputMapAction,
}
#[derive(Debug)]
pub struct MenuKeyboardInputMapElement {
pub key: KeyCode,
pub action: MenuInputMapAction,
}
#[derive(Debug)]
pub struct MenuGamepadInputMapElement {
pub binding: GamepadBinding,
pub action: MenuInputMapAction,
}
#[derive(Resource)]
pub struct BaseInputMap {
pub keyboard: Vec<KeyboardInputMapElement>,
pub gamepad: Vec<GamepadInputMapElement>,
}
#[derive(Resource)]
pub struct MenuInputMap {
pub keyboard: Vec<MenuKeyboardInputMapElement>,
pub gamepad: Vec<MenuGamepadInputMapElement>,
}
+32 -1
View File
@@ -18,7 +18,8 @@ pub use buffer::{FighterCommands, FighterInput};
pub use frame::FighterInputFrame;
pub use map::{
BaseInputMap, GamepadBinding, GamepadInputMapElement, InputActionState, InputMapAction,
KeyboardInputMapElement,
KeyboardInputMapElement, MenuGamepadInputMapElement, MenuInputMap, MenuInputMapAction,
MenuKeyboardInputMapElement,
};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
@@ -91,6 +92,9 @@ impl Plugin for FighterInputPlugin {
key: KeyCode::KeyJ,
action: InputMapAction::Attack,
},
// Menu
],
gamepad: vec![
// left stick
@@ -121,6 +125,33 @@ impl Plugin for FighterInputPlugin {
binding: GamepadBinding::Button(GamepadButton::East),
action: InputMapAction::Attack,
},
],
})
.insert_resource(MenuInputMap {
keyboard: vec![
MenuKeyboardInputMapElement { key: KeyCode::ArrowUp, action: MenuInputMapAction::MovementYDir(1) },
MenuKeyboardInputMapElement { key: KeyCode::ArrowDown, action: MenuInputMapAction::MovementYDir(-1) },
MenuKeyboardInputMapElement { key: KeyCode::ArrowLeft, action: MenuInputMapAction::MovementXDir(-1) },
MenuKeyboardInputMapElement { key: KeyCode::ArrowRight, action: MenuInputMapAction::MovementXDir(1) },
MenuKeyboardInputMapElement { key: KeyCode::Enter, action: MenuInputMapAction::Accept },
MenuKeyboardInputMapElement { key: KeyCode::Escape, action: MenuInputMapAction::Back },
MenuKeyboardInputMapElement { key: KeyCode::Space, action: MenuInputMapAction::Start },
MenuKeyboardInputMapElement { key: KeyCode::KeyW, action: MenuInputMapAction::MovementYDir(1) },
MenuKeyboardInputMapElement { key: KeyCode::KeyS, action: MenuInputMapAction::MovementYDir(-1) },
MenuKeyboardInputMapElement { key: KeyCode::KeyA, action: MenuInputMapAction::MovementXDir(-1) },
MenuKeyboardInputMapElement { key: KeyCode::KeyD, action: MenuInputMapAction::MovementXDir(1) },
],
gamepad: vec![
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::DPadUp), action: MenuInputMapAction::MovementYDir(1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::DPadDown), action: MenuInputMapAction::MovementYDir(-1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::DPadLeft), action: MenuInputMapAction::MovementXDir(-1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::DPadRight), action: MenuInputMapAction::MovementXDir(1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Axis(GamepadAxis::LeftStickX, 1), action: MenuInputMapAction::MovementXDir(1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Axis(GamepadAxis::LeftStickY, 1), action: MenuInputMapAction::MovementYDir(1) },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::South), action: MenuInputMapAction::Accept },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::West), action: MenuInputMapAction::Back },
MenuGamepadInputMapElement { binding: GamepadBinding::Button(GamepadButton::Start), action: MenuInputMapAction::Start },
],
})
.init_resource::<LocalInputAssignments>()