remove held state in input.
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 7m57s

- Winit not return event if multiple key as repeat event
This commit is contained in:
Florian RICHER 2025-05-26 13:29:38 +02:00
parent 1babc5bfeb
commit e58c22b531
Signed by: florian.richer
GPG key ID: C73D37CBED7BFC77
2 changed files with 16 additions and 25 deletions

View file

@ -12,12 +12,11 @@ use vulkano::sync::GpuFuture;
use vulkano_util::context::VulkanoContext; use vulkano_util::context::VulkanoContext;
use vulkano_util::window::{VulkanoWindows, WindowDescriptor}; use vulkano_util::window::{VulkanoWindows, WindowDescriptor};
use winit::application::ApplicationHandler; use winit::application::ApplicationHandler;
use winit::event::WindowEvent; use winit::event::{ElementState, WindowEvent};
use winit::event_loop::ActiveEventLoop; use winit::event_loop::ActiveEventLoop;
use winit::keyboard::{KeyCode, PhysicalKey};
use winit::window::WindowId; use winit::window::WindowId;
use super::input::{InputState, KeyState}; use super::input::InputState;
use super::vulkan_context::VulkanContext; use super::vulkan_context::VulkanContext;
pub struct App { pub struct App {
@ -176,10 +175,11 @@ impl ApplicationHandler for App {
self.input_state.get_mouse_state().delta self.input_state.get_mouse_state().delta
)); ));
for (key, state) in for (key, state) in self
self.input_state.key_states.iter().filter(|(_, state)| { .input_state
*state == &KeyState::Pressed || *state == &KeyState::Held .key_states
}) .iter()
.filter(|(_, state)| *state == &ElementState::Pressed)
{ {
ui.label(format!("{:?} State: {:?}", key, state)); ui.label(format!("{:?} State: {:?}", key, state));
} }

View file

@ -6,14 +6,6 @@ use winit::{
keyboard::PhysicalKey, keyboard::PhysicalKey,
}; };
#[derive(Debug, Default, PartialEq)]
pub enum KeyState {
#[default]
Pressed,
Released,
Held,
}
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct MouseState { pub struct MouseState {
old_position: glam::Vec2, old_position: glam::Vec2,
@ -23,7 +15,7 @@ pub struct MouseState {
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct InputState { pub struct InputState {
pub key_states: HashMap<PhysicalKey, KeyState>, pub key_states: HashMap<PhysicalKey, ElementState>,
pub mouse_state: MouseState, pub mouse_state: MouseState,
} }
@ -46,8 +38,8 @@ impl InputState {
self.mouse_state.old_position = self.mouse_state.position; self.mouse_state.old_position = self.mouse_state.position;
} }
pub fn get_key_state(&self, key: PhysicalKey) -> &KeyState { pub fn get_key_state(&self, key: PhysicalKey) -> &ElementState {
self.key_states.get(&key).unwrap_or(&KeyState::Released) self.key_states.get(&key).unwrap_or(&ElementState::Released)
} }
pub fn get_mouse_state(&self) -> &MouseState { pub fn get_mouse_state(&self) -> &MouseState {
@ -59,18 +51,17 @@ impl InputState {
let new_key_state = match key_state { let new_key_state = match key_state {
Some(key_state) => match event.state { Some(key_state) => match event.state {
ElementState::Pressed => match key_state { ElementState::Pressed => match key_state {
KeyState::Released => Some(KeyState::Pressed), ElementState::Released => Some(ElementState::Pressed),
KeyState::Pressed => Some(KeyState::Held), ElementState::Pressed => None,
KeyState::Held => None,
}, },
ElementState::Released => match key_state { ElementState::Released => match key_state {
KeyState::Released => None, ElementState::Released => None,
_ => Some(KeyState::Released), ElementState::Pressed => Some(ElementState::Released),
}, },
}, },
None => match event.state { None => match event.state {
ElementState::Pressed => Some(KeyState::Pressed), ElementState::Pressed => Some(ElementState::Pressed),
ElementState::Released => Some(KeyState::Released), ElementState::Released => Some(ElementState::Released),
}, },
}; };
if let Some(new_key_state) = new_key_state { if let Some(new_key_state) = new_key_state {