A multiplayer VR framework w/voice chat
1use std::f32::consts::PI; 2 3use bevy::{ input::mouse::MouseMotion, prelude::* }; 4 5#[derive(Component)] 6pub struct DebugCamera{ 7 pitch: f32, 8 yaw: f32 9} 10 11impl Default for DebugCamera{ 12 fn default() -> Self { 13 Self { 14 pitch: 0.0, 15 yaw: -PI / 2.0 16 } 17 } 18} 19 20pub fn setup( 21 mut query: Query<(&mut DebugCamera, &mut Transform)>, 22 time: Res<Time>, 23 24 keys: Res<ButtonInput<KeyCode>>, 25 mouse_buttons: Res<ButtonInput<MouseButton>>, 26 mut mouse_motion: MessageReader<MouseMotion>, 27){ 28 let mut delta_time = time.delta_secs(); 29 if keys.pressed(KeyCode::ShiftLeft){ delta_time *= 2.0; } 30 31 for ( mut debug, mut transform ) in &mut query{ 32 for ev in mouse_motion.read(){ 33 if mouse_buttons.pressed(MouseButton::Right){ 34 debug.pitch -= ev.delta.y * delta_time * 0.1; 35 debug.yaw -= ev.delta.x * delta_time * 0.1; 36 } 37 } 38 39 transform.rotation = Quat::from_euler(EulerRot::YXZ, debug.yaw, debug.pitch, 0.0); 40 41 if keys.pressed(KeyCode::KeyW){ 42 let dir = transform.forward(); 43 transform.translation += dir * delta_time; 44 } else if keys.pressed(KeyCode::KeyS){ 45 let dir = -transform.forward(); 46 transform.translation += dir * delta_time; 47 } 48 49 if keys.pressed(KeyCode::KeyA){ 50 let dir = transform.left(); 51 transform.translation += dir * delta_time; 52 } else if keys.pressed(KeyCode::KeyD){ 53 let dir = -transform.left(); 54 transform.translation += dir * delta_time; 55 } 56 57 if keys.pressed(KeyCode::KeyE){ 58 let dir = transform.up(); 59 transform.translation += dir * delta_time; 60 } else if keys.pressed(KeyCode::KeyQ){ 61 let dir = -transform.up(); 62 transform.translation += dir * delta_time; 63 } 64 } 65}