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::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));
}

View file

@ -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<PhysicalKey, KeyState>,
pub key_states: HashMap<PhysicalKey, ElementState>,
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 {