aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLibravatar Silas Bartha <silas@exvacuum.dev>2024-06-05 13:40:23 -0400
committerLibravatar Silas Bartha <silas@exvacuum.dev>2024-06-05 13:40:23 -0400
commitc30929cbd3302ddb869d25e7ea2bd151a4cdb91e (patch)
treec5cb54be35806a98843c317822ca80f7eba0bc49 /src
parent1addc01cacaf148547d999be0e4f964eabeed834 (diff)
Ensured key release events are processed by input resource first
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);
+ }
+ _ => (),
+ }
+ }
}