From b2ecaafe7965ff337506c8a7d504a71e8f3f5f12 Mon Sep 17 00:00:00 2001 From: Dmitry Stepanov Date: Wed, 17 Sep 2025 17:33:32 +0300 Subject: [PATCH] prevent consecutive keypress events interfere with pressed/released keys --- fyrox-impl/src/engine/mod.rs | 44 ++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/fyrox-impl/src/engine/mod.rs b/fyrox-impl/src/engine/mod.rs index 6e8a012c7..757e6eada 100644 --- a/fyrox-impl/src/engine/mod.rs +++ b/fyrox-impl/src/engine/mod.rs @@ -2179,25 +2179,39 @@ impl Engine { match event { Event::WindowEvent { event, .. } => match event { WindowEvent::KeyboardInput { event, .. } => { + let keyboard = &mut self.input_state.keyboard; + + match event.state { + ElementState::Pressed => { + if keyboard + .keys + .get(&event.physical_key) + .is_none_or(|state| *state == ElementState::Released) + { + self.input_state + .keyboard + .pressed_keys + .insert(event.physical_key); + } + } + ElementState::Released => { + if keyboard + .keys + .get(&event.physical_key) + .is_some_and(|state| *state == ElementState::Pressed) + { + self.input_state + .keyboard + .released_keys + .insert(event.physical_key); + } + } + } + self.input_state .keyboard .keys .insert(event.physical_key, event.state); - - match event.state { - ElementState::Pressed => { - self.input_state - .keyboard - .pressed_keys - .insert(event.physical_key); - } - ElementState::Released => { - self.input_state - .keyboard - .released_keys - .insert(event.physical_key); - } - } } WindowEvent::CursorMoved { position, .. } => { self.input_state.mouse.position =