remove held state in input.
Some checks failed
Build legacy Nix package on Ubuntu / build (push) Failing after 7m57s
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:
parent
1babc5bfeb
commit
e58c22b531
2 changed files with 16 additions and 25 deletions
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue