Let KeyboardManager handle events.
Clean up event loop a little.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use sdl2::event::Event;
|
||||||
use sdl2::keyboard::Keycode;
|
use sdl2::keyboard::Keycode;
|
||||||
|
|
||||||
|
|
||||||
pub struct KeyboardHandler {
|
pub struct KeyboardHandler {
|
||||||
pressed_keys: HashMap<Keycode, bool>,
|
pressed_keys: HashMap<Keycode, bool>,
|
||||||
released_keys: HashMap<Keycode, bool>,
|
released_keys: HashMap<Keycode, bool>,
|
||||||
@@ -18,6 +18,20 @@ impl KeyboardHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn process(&mut self, event: &Event) {
|
||||||
|
match *event {
|
||||||
|
Event::KeyDown {keycode, repeat, ..} => {
|
||||||
|
if repeat == false {
|
||||||
|
self.key_down(keycode.unwrap());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Event::KeyUp {keycode, ..} => {
|
||||||
|
self.key_up(keycode.unwrap());
|
||||||
|
},
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn clear(&mut self) {
|
pub fn clear(&mut self) {
|
||||||
self.pressed_keys.clear();
|
self.pressed_keys.clear();
|
||||||
self.released_keys.clear();
|
self.released_keys.clear();
|
||||||
|
|||||||
13
src/main.rs
13
src/main.rs
@@ -181,21 +181,12 @@ fn main() {
|
|||||||
use sdl2::event::Event;
|
use sdl2::event::Event;
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
|
Event::KeyDown {keycode, ..} if keycode == Some(Keycode::Escape) => break 'main,
|
||||||
Event::Quit {..} => break 'main,
|
Event::Quit {..} => break 'main,
|
||||||
Event::KeyDown {keycode, repeat, ..} => {
|
|
||||||
if repeat == false {
|
|
||||||
keyboard.key_down(keycode.unwrap());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Event::KeyUp {keycode, ..} => {
|
|
||||||
keyboard.key_up(keycode.unwrap());
|
|
||||||
},
|
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if keyboard.was_pressed(Keycode::Escape) {
|
keyboard.process(&event);
|
||||||
break 'main;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if keyboard.is_held(Keycode::Right) && (player.dx >= 0.0 || player.on_ground) {
|
if keyboard.is_held(Keycode::Right) && (player.dx >= 0.0 || player.on_ground) {
|
||||||
|
|||||||
Reference in New Issue
Block a user