From e58c22b531d3d096cb5b2dcc22706bba73a92e0b Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Mon, 26 May 2025 13:29:38 +0200 Subject: [PATCH] remove held state in input. - Winit not return event if multiple key as repeat event --- src/render/app.rs | 14 +++++++------- src/render/input.rs | 27 +++++++++------------------ 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/render/app.rs b/src/render/app.rs index 5515e97..ee88731 100644 --- a/src/render/app.rs +++ b/src/render/app.rs @@ -12,12 +12,11 @@ use vulkano::sync::GpuFuture; use vulkano_util::context::VulkanoContext; use vulkano_util::window::{VulkanoWindows, WindowDescriptor}; use winit::application::ApplicationHandler; -use winit::event::WindowEvent; +use winit::event::{ElementState, WindowEvent}; use winit::event_loop::ActiveEventLoop; -use winit::keyboard::{KeyCode, PhysicalKey}; use winit::window::WindowId; -use super::input::{InputState, KeyState}; +use super::input::InputState; use super::vulkan_context::VulkanContext; pub struct App { @@ -176,10 +175,11 @@ impl ApplicationHandler for App { self.input_state.get_mouse_state().delta )); - for (key, state) in - self.input_state.key_states.iter().filter(|(_, state)| { - *state == &KeyState::Pressed || *state == &KeyState::Held - }) + for (key, state) in self + .input_state + .key_states + .iter() + .filter(|(_, state)| *state == &ElementState::Pressed) { ui.label(format!("{:?} State: {:?}", key, state)); } diff --git a/src/render/input.rs b/src/render/input.rs index 04ca813..59e8398 100644 --- a/src/render/input.rs +++ b/src/render/input.rs @@ -6,14 +6,6 @@ use winit::{ keyboard::PhysicalKey, }; -#[derive(Debug, Default, PartialEq)] -pub enum KeyState { - #[default] - Pressed, - Released, - Held, -} - #[derive(Debug, Default)] pub struct MouseState { old_position: glam::Vec2, @@ -23,7 +15,7 @@ pub struct MouseState { #[derive(Debug, Default)] pub struct InputState { - pub key_states: HashMap, + pub key_states: HashMap, pub mouse_state: MouseState, } @@ -46,8 +38,8 @@ impl InputState { self.mouse_state.old_position = self.mouse_state.position; } - pub fn get_key_state(&self, key: PhysicalKey) -> &KeyState { - self.key_states.get(&key).unwrap_or(&KeyState::Released) + pub fn get_key_state(&self, key: PhysicalKey) -> &ElementState { + self.key_states.get(&key).unwrap_or(&ElementState::Released) } pub fn get_mouse_state(&self) -> &MouseState { @@ -59,18 +51,17 @@ impl InputState { let new_key_state = match key_state { Some(key_state) => match event.state { ElementState::Pressed => match key_state { - KeyState::Released => Some(KeyState::Pressed), - KeyState::Pressed => Some(KeyState::Held), - KeyState::Held => None, + ElementState::Released => Some(ElementState::Pressed), + ElementState::Pressed => None, }, ElementState::Released => match key_state { - KeyState::Released => None, - _ => Some(KeyState::Released), + ElementState::Released => None, + ElementState::Pressed => Some(ElementState::Released), }, }, None => match event.state { - ElementState::Pressed => Some(KeyState::Pressed), - ElementState::Released => Some(KeyState::Released), + ElementState::Pressed => Some(ElementState::Pressed), + ElementState::Released => Some(ElementState::Released), }, }; if let Some(new_key_state) = new_key_state {