Refactor out the keymap

This commit is contained in:
numzero 2024-09-23 18:50:55 +03:00
parent 26b7794159
commit 24b1a07f28

View File

@ -103,6 +103,15 @@ fn prepare_scene(display: &impl Facade) -> Vec<Wireframe> {
.collect() .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() { fn main() {
let event_loop = EventLoop::builder().build().unwrap(); let event_loop = EventLoop::builder().build().unwrap();
let cfg = ConfigTemplateBuilder::new().with_multisampling(8); let cfg = ConfigTemplateBuilder::new().with_multisampling(8);
@ -137,26 +146,10 @@ fn main() {
t1 = t2; t1 = t2;
dt.as_secs_f32() dt.as_secs_f32()
}; };
let v: Vec3 = { let v: Vec3 = KEYS_MOVE
let ctl_left = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyA)); .iter()
let ctl_right = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyD)); .filter_map(|(key, dir)| keys_pressed.contains(key).then_some(dir))
let ctl_fwd = keys_pressed.contains(&PhysicalKey::Code(KeyCode::KeyW)); .sum();
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()
};
cam_pos += 100. * dt * (cam_rot.state() * v); cam_pos += 100. * dt * (cam_rot.state() * v);
let size = window.inner_size(); let size = window.inner_size();