From 24b1a07f2860d7f624060d2d04675fd977f60b60 Mon Sep 17 00:00:00 2001 From: numzero Date: Mon, 23 Sep 2024 18:50:55 +0300 Subject: [PATCH] Refactor out the keymap --- src/bin/wireframe/main.rs | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/bin/wireframe/main.rs b/src/bin/wireframe/main.rs index f311dc2..5de36f2 100644 --- a/src/bin/wireframe/main.rs +++ b/src/bin/wireframe/main.rs @@ -103,6 +103,15 @@ fn prepare_scene(display: &impl Facade) -> Vec { .collect() } +static KEYS_MOVE: &'static [(PhysicalKey, Vec3)] = &[ + (PhysicalKey::Code(KeyCode::KeyW), vec3(1., 0., 0.)), + (PhysicalKey::Code(KeyCode::KeyS), vec3(-1., 0., 0.)), + (PhysicalKey::Code(KeyCode::KeyA), vec3(0., 1., 0.)), + (PhysicalKey::Code(KeyCode::KeyD), vec3(0., -1., 0.)), + (PhysicalKey::Code(KeyCode::Space), vec3(0., 0., 1.)), + (PhysicalKey::Code(KeyCode::ShiftLeft), vec3(0., 0., -1.)), +]; + fn main() { let event_loop = EventLoop::builder().build().unwrap(); let cfg = ConfigTemplateBuilder::new().with_multisampling(8); @@ -137,26 +146,10 @@ fn main() { t1 = t2; dt.as_secs_f32() }; - let v: Vec3 = { - let ctl_left = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyA)); - let ctl_right = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyD)); - let ctl_fwd = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyW)); - let ctl_bwd = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyS)); - let ctl_up = keys_pressed.contains(&PhysicalKey::Code(KeyCode::Space)); - let ctl_down = - keys_pressed.contains(&PhysicalKey::Code(KeyCode::ShiftLeft)); - [ - (ctl_left, vec3(0., 1., 0.)), - (ctl_right, vec3(0., -1., 0.)), - (ctl_fwd, vec3(1., 0., 0.)), - (ctl_bwd, vec3(-1., 0., 0.)), - (ctl_up, vec3(0., 0., 1.)), - (ctl_down, vec3(0., 0., -1.)), - ] - .into_iter() - .filter_map(|(ctl, dir)| ctl.then_some(dir)) - .sum() - }; + let v: Vec3 = KEYS_MOVE + .iter() + .filter_map(|(key, dir)| keys_pressed.contains(key).then_some(dir)) + .sum(); cam_pos += 100. * dt * (cam_rot.state() * v); let size = window.inner_size();