Added keyboard key to mouse control for scene viewer example (#4411)

# Objective

- Added keyboard control for scene_viewer example. Fixes #4407 


Co-authored-by: Troels Jessen <kairyuka@gmail.com>
This commit is contained in:
Troels Jessen 2022-05-11 09:31:39 +00:00
parent 94d941661d
commit ae580e58dd

View File

@ -18,21 +18,21 @@ fn main() {
println!( println!(
" "
Controls: Controls:
MOUSE - Move camera orientation MOUSE - Move camera orientation
LClick - Enable mouse movement LClick/M - Enable mouse movement
WSAD - forward/back/strafe left/right WSAD - forward/back/strafe left/right
LShift - 'run' LShift - 'run'
E - up E - up
Q - down Q - down
L - animate light direction L - animate light direction
U - toggle shadows U - toggle shadows
C - cycle through cameras C - cycle through cameras
5/6 - decrease/increase shadow projection width 5/6 - decrease/increase shadow projection width
7/8 - decrease/increase shadow projection height 7/8 - decrease/increase shadow projection height
9/0 - decrease/increase shadow projection near/far 9/0 - decrease/increase shadow projection near/far
Space - Play/Pause animation Space - Play/Pause animation
Enter - Cycle through animations Enter - Cycle through animations
" "
); );
App::new() App::new()
@ -404,7 +404,8 @@ struct CameraController {
pub key_up: KeyCode, pub key_up: KeyCode,
pub key_down: KeyCode, pub key_down: KeyCode,
pub key_run: KeyCode, pub key_run: KeyCode,
pub key_enable_mouse: MouseButton, pub mouse_key_enable_mouse: MouseButton,
pub keyboard_key_enable_mouse: KeyCode,
pub walk_speed: f32, pub walk_speed: f32,
pub run_speed: f32, pub run_speed: f32,
pub friction: f32, pub friction: f32,
@ -426,7 +427,8 @@ impl Default for CameraController {
key_up: KeyCode::E, key_up: KeyCode::E,
key_down: KeyCode::Q, key_down: KeyCode::Q,
key_run: KeyCode::LShift, key_run: KeyCode::LShift,
key_enable_mouse: MouseButton::Left, mouse_key_enable_mouse: MouseButton::Left,
keyboard_key_enable_mouse: KeyCode::M,
walk_speed: 5.0, walk_speed: 5.0,
run_speed: 15.0, run_speed: 15.0,
friction: 0.5, friction: 0.5,
@ -442,6 +444,7 @@ fn camera_controller(
mut mouse_events: EventReader<MouseMotion>, mut mouse_events: EventReader<MouseMotion>,
mouse_button_input: Res<Input<MouseButton>>, mouse_button_input: Res<Input<MouseButton>>,
key_input: Res<Input<KeyCode>>, key_input: Res<Input<KeyCode>>,
mut move_toggled: Local<bool>,
mut query: Query<(&mut Transform, &mut CameraController), With<Camera>>, mut query: Query<(&mut Transform, &mut CameraController), With<Camera>>,
) { ) {
let dt = time.delta_seconds(); let dt = time.delta_seconds();
@ -477,6 +480,9 @@ fn camera_controller(
if key_input.pressed(options.key_down) { if key_input.pressed(options.key_down) {
axis_input.y -= 1.0; axis_input.y -= 1.0;
} }
if key_input.just_pressed(options.keyboard_key_enable_mouse) {
*move_toggled = !*move_toggled;
}
// Apply movement update // Apply movement update
if axis_input != Vec3::ZERO { if axis_input != Vec3::ZERO {
@ -501,7 +507,7 @@ fn camera_controller(
// Handle mouse input // Handle mouse input
let mut mouse_delta = Vec2::ZERO; let mut mouse_delta = Vec2::ZERO;
if mouse_button_input.pressed(options.key_enable_mouse) { if mouse_button_input.pressed(options.mouse_key_enable_mouse) || *move_toggled {
for mouse_event in mouse_events.iter() { for mouse_event in mouse_events.iter() {
mouse_delta += mouse_event.delta; mouse_delta += mouse_event.delta;
} }