From c816b6629e9ab59eebf5df89027c9b904afc8fd3 Mon Sep 17 00:00:00 2001 From: mars Date: Sun, 15 May 2022 15:55:30 -0600 Subject: [PATCH] Add FlycamWidget keyboard processing --- editor/src/ui.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/editor/src/ui.rs b/editor/src/ui.rs index 3c54603..16d2150 100644 --- a/editor/src/ui.rs +++ b/editor/src/ui.rs @@ -1,3 +1,4 @@ +use crate::winit; use cyborg::camera::Flycam; pub struct UserInterface { @@ -156,9 +157,40 @@ impl egui::Widget for &mut ViewportWidget { ui.painter().add(Shape::mesh(mesh)); if response.dragged() { - println!("dragging"); let delta = response.drag_delta(); self.flycam.process_mouse(delta.x as f64, delta.y as f64); + + for event in ui.input().events.iter() { + match event { + egui::Event::Key { key, pressed, .. } => { + use winit::event::{ElementState, VirtualKeyCode}; + + let key = match key { + egui::Key::W => Some(VirtualKeyCode::W), + egui::Key::A => Some(VirtualKeyCode::A), + egui::Key::S => Some(VirtualKeyCode::S), + egui::Key::D => Some(VirtualKeyCode::D), + // TODO remap from shift key somehow? + egui::Key::E => Some(VirtualKeyCode::E), + egui::Key::Q => Some(VirtualKeyCode::Q), + _ => None, + }; + + let state = if *pressed { + ElementState::Pressed + } else { + ElementState::Released + }; + + if let Some(key) = key { + self.flycam.process_keyboard(key, state); + } + } + _ => {} + } + } + } else if response.drag_released() { + self.flycam.defocus(); } println!("{:#?}", self.flycam);