1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use crate::{
engine::Engine,
ecs::{ InputComponent, InputEvent },
};
use pill_core::{ Vector2f };
use anyhow::{ Result, Context, Error };
use winit::event::{ ElementState, MouseButton, MouseScrollDelta };
pub fn input_system(engine: &mut Engine) -> Result<()> {
let input_component = engine.get_global_component_mut::<InputComponent>()?;
input_component.set_keys();
input_component.set_mouse_buttons();
input_component.set_mouse_motion();
while engine.input_queue.is_empty() == false {
let front_event = engine.input_queue.pop_front().unwrap();
let input_component = engine.get_global_component_mut::<InputComponent>()?;
match front_event {
InputEvent::KeyboardKey { key, state } => {
input_component.set_key(key, state);
},
InputEvent::MouseButton {key, state} => {
input_component.set_mouse_button(key, state);
},
InputEvent::MouseWheel { delta } => {
match delta {
MouseScrollDelta::LineDelta(x, y) => {
input_component.set_mouse_scroll_delta(Vector2f::new(x, y));
},
MouseScrollDelta::PixelDelta(delta) => {
input_component.set_mouse_scroll_pixel_delta(Vector2f::new(delta.x as f32, delta.y as f32));
},
}
},
InputEvent::MouseDelta { delta } => {
input_component.set_mouse_delta(delta);
},
InputEvent::MousePosition { position} => {
input_component.set_mouse_position(position);
},
}
}
Ok(())
}