Let KeyboardManager handle events.

Clean up event loop a little.
This commit is contained in:
2016-06-12 21:48:27 +02:00
parent 19a1f4b8f9
commit 4c2b5a994c
2 changed files with 17 additions and 12 deletions

View File

@@ -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();

View File

@@ -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) {