Rework input buffer to match HDR closer (#79)
## Summary - Preserve distinct same-action bindings in rollback input frames. - Add independent command lifetimes with tap and state-scoped hold buffering. - Detect second shield bindings and consume shield commands for air dodge. - Fix duplicate keyboard mappings being overwritten. Reviewed-on: #79 Co-authored-by: Álex Román Núñez <eirexe@eirteam.moe>
This commit was merged in pull request #79.
This commit is contained in:
+14
-1
@@ -15,7 +15,7 @@ pub mod keyboard;
|
||||
pub mod map;
|
||||
|
||||
pub use buffer::{FighterCommands, FighterInput};
|
||||
pub use frame::FighterInputFrame;
|
||||
pub use frame::{ActionBindingMask, DigitalAction, DigitalActionBindings, FighterInputFrame};
|
||||
pub use map::{
|
||||
BaseInputMap, GamepadBinding, GamepadInputMapElement, InputActionState, InputMapAction,
|
||||
KeyboardInputMapElement, MenuGamepadInputMapElement, MenuInputMap, MenuInputMapAction,
|
||||
@@ -78,36 +78,43 @@ impl Plugin for FighterInputPlugin {
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::KeyD,
|
||||
action: InputMapAction::MovementXDir(1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
// left
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::KeyA,
|
||||
action: InputMapAction::MovementXDir(-1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
// up
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::KeyW,
|
||||
action: InputMapAction::MovementYDir(1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
// down
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::KeyS,
|
||||
action: InputMapAction::MovementYDir(-1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
// jump
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::Space,
|
||||
action: InputMapAction::Jump,
|
||||
binding_slot: 0,
|
||||
},
|
||||
// shield/airdodge
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::ShiftLeft,
|
||||
action: InputMapAction::Shield,
|
||||
binding_slot: 0,
|
||||
},
|
||||
// attack
|
||||
KeyboardInputMapElement {
|
||||
key: KeyCode::KeyJ,
|
||||
action: InputMapAction::Attack,
|
||||
binding_slot: 0,
|
||||
},
|
||||
// Menu
|
||||
],
|
||||
@@ -116,28 +123,34 @@ impl Plugin for FighterInputPlugin {
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Axis(GamepadAxis::LeftStickX, 1),
|
||||
action: InputMapAction::MovementXDir(1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Axis(GamepadAxis::LeftStickY, 1),
|
||||
action: InputMapAction::MovementYDir(1),
|
||||
binding_slot: 0,
|
||||
},
|
||||
// jump
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Button(GamepadButton::North),
|
||||
action: InputMapAction::Jump,
|
||||
binding_slot: 0,
|
||||
},
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Button(GamepadButton::LeftTrigger2),
|
||||
action: InputMapAction::Shield,
|
||||
binding_slot: 0,
|
||||
},
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Button(GamepadButton::RightTrigger2),
|
||||
action: InputMapAction::Shield,
|
||||
binding_slot: 1,
|
||||
},
|
||||
// attack
|
||||
GamepadInputMapElement {
|
||||
binding: GamepadBinding::Button(GamepadButton::East),
|
||||
action: InputMapAction::Attack,
|
||||
binding_slot: 0,
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user