diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/input/systems.rs | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/input/systems.rs b/src/input/systems.rs index 3b7f11d..810c08e 100644 --- a/src/input/systems.rs +++ b/src/input/systems.rs @@ -1,5 +1,7 @@ +use std::cmp::Ordering; + use bevy::prelude::*; -use crossterm::event::{read, Event, KeyEventKind}; +use crossterm::event::{read, Event, KeyEvent, KeyEventKind}; use super::{events::TerminalInputEvent, resources::{EventQueue, TerminalInput}}; @@ -29,18 +31,26 @@ pub fn input_handling( ) { input.clear_released(); let mut event_queue = event_queue.0.lock().unwrap(); + let mut key_events = Vec::<KeyEvent>::new(); while let Some(event) = event_queue.pop() { if let Event::Key(event) = event { - match event.kind { - KeyEventKind::Press => { - input.press(event.code); - } - KeyEventKind::Release => { - input.release(event.code); - } - _ => (), - } + info!("{:?}", event); + key_events.push(event); } event_writer.send(TerminalInputEvent(event)); } + + key_events.sort_by(|&a, &b| a.kind.partial_cmp(&b.kind).unwrap_or(Ordering::Equal)); + for event in key_events { + info!("{:?}", event); + match event.kind { + KeyEventKind::Press => { + input.press(event.code); + } + KeyEventKind::Release => { + input.release(event.code); + } + _ => (), + } + } } |