aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/input/systems.rs30
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);
+ }
+ _ => (),
+ }
+ }
}