From 068dadbbb0eccd9bbb8963e975ba22dd0738d859 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 15 Aug 2026 19:11:14 +0200 Subject: fix(engine): stop overwriting previous keyboard key states --- engine/src/util.rs | 9 +++++---- engine/src/windowing.rs | 4 +++- engine/src/windowing/keyboard.rs | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/engine/src/util.rs b/engine/src/util.rs index f820b64..9d1c887 100644 --- a/engine/src/util.rs +++ b/engine/src/util.rs @@ -234,11 +234,13 @@ impl BitArray> (bit_index_in_byte)) & Self::ITEM_MASK } - #[tracing::instrument(skip_all)] - pub fn set(&mut self, item_index: usize, item_bits: u8) + #[tracing::instrument(skip(self))] + pub fn clear_and_set(&mut self, item_index: usize, item_bits: u8, clear_mask: u8) { let item_bits = item_bits & Self::ITEM_MASK; + let clear_mask = clear_mask & Self::ITEM_MASK; + let bit_index = item_index * BITS_PER_ITEM; let byte_index = bit_index / 8; @@ -246,14 +248,13 @@ impl BitArray KEY_RELEASED_BITS, }; - input.keys.set(key as usize, key_state_bits); + input + .keys + .clear_and_set(key as usize, key_state_bits, u8::MAX); } WindowEvent::CursorMoved { device_id: _, position } => { { diff --git a/engine/src/windowing/keyboard.rs b/engine/src/windowing/keyboard.rs index 8e0cfbe..dffa95e 100644 --- a/engine/src/windowing/keyboard.rs +++ b/engine/src/windowing/keyboard.rs @@ -96,12 +96,13 @@ impl Keyboard pub fn set_key_state(&mut self, key: Key, key_state: KeyState) { - self.keys.set( + self.keys.clear_and_set( key as usize, match key_state { KeyState::Pressed => KEY_CURR_PRESSED_BITS, KeyState::Released => 0, }, + KEY_CURR_PRESSED_BITS, ); } -- cgit v1.2.3-18-g5258