notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit e296d6ca0614fee017f0fcf8e068ae961c2cb8c5
parent c5865b24bfeee1f4e1257d52efc33251c4bee389
Author: William Casarin <jb55@jb55.com>
Date:   Fri, 20 Feb 2026 14:53:51 -0800

nostrverse: add WASD keyboard movement for fly camera

Forward WASD/QE/Space keys from egui input to renderbud's new fly
camera controller for free scene navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

Diffstat:
Mcrates/notedeck_nostrverse/src/room_view.rs | 38+++++++++++++++++++++++++++++++++++---
1 file changed, 35 insertions(+), 3 deletions(-)

diff --git a/crates/notedeck_nostrverse/src/room_view.rs b/crates/notedeck_nostrverse/src/room_view.rs @@ -19,24 +19,56 @@ pub fn show_room_view( let available_size = ui.available_size(); let (rect, response) = ui.allocate_exact_size(available_size, Sense::click_and_drag()); - // Update renderer target size + // Update renderer target size and handle input { let mut r = renderer.renderer.lock().unwrap(); r.set_target_size((rect.width() as u32, rect.height() as u32)); - // Handle mouse drag for camera orbit + // Handle mouse drag for camera look if response.dragged() { let delta = response.drag_delta(); r.on_mouse_drag(delta.x, delta.y); } - // Handle scroll for zoom + // Handle scroll for speed adjustment if response.hover_pos().is_some() { let scroll = ui.input(|i| i.raw_scroll_delta.y); if scroll.abs() > 0.0 { r.on_scroll(scroll * 0.01); } } + + // WASD + QE movement + let dt = ui.input(|i| i.stable_dt); + let mut forward = 0.0_f32; + let mut right = 0.0_f32; + let mut up = 0.0_f32; + + ui.input(|i| { + if i.key_down(egui::Key::W) { + forward += 1.0; + } + if i.key_down(egui::Key::S) { + forward -= 1.0; + } + if i.key_down(egui::Key::D) { + right += 1.0; + } + if i.key_down(egui::Key::A) { + right -= 1.0; + } + if i.key_down(egui::Key::E) || i.key_down(egui::Key::Space) { + up += 1.0; + } + if i.key_down(egui::Key::Q) { + up -= 1.0; + } + }); + + if forward != 0.0 || right != 0.0 || up != 0.0 { + r.process_movement(forward, right, up, dt); + ui.ctx().request_repaint(); + } } // Register the 3D scene paint callback