From ead5445fa415381553a1782f5629e1babb268626 Mon Sep 17 00:00:00 2001 From: Maiko van der Veen Date: Fri, 31 Mar 2023 23:44:24 +0200 Subject: [PATCH 1/6] Added control scheme for 2d scenes Added 'orthographic' option to SpectatorSettings. Disables mouse looking & capturing. Makes W and S control y-axis movement. --- examples/2d_scene.rs | 25 +++++++++++++++++++++++++ src/lib.rs | 30 +++++++++++++++++++----------- 2 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 examples/2d_scene.rs diff --git a/examples/2d_scene.rs b/examples/2d_scene.rs new file mode 100644 index 0000000..472149b --- /dev/null +++ b/examples/2d_scene.rs @@ -0,0 +1,25 @@ +use bevy::prelude::*; +use bevy_spectator::*; + +fn main() { + App::new() + .insert_resource(SpectatorSettings { + orthographic: true, + ..default() + }) + .add_plugins(DefaultPlugins) + .add_plugin(SpectatorPlugin) + .add_startup_system(setup) + .run(); +} + +fn setup(mut commands: Commands) { + commands.spawn((Camera2dBundle::default(), Spectator)); + commands.spawn(SpriteBundle { + transform: Transform { + scale: Vec3::new(10.0, 10.0, 1.0), + ..default() + }, + ..default() + }); +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 04de839..0044e22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -103,12 +103,14 @@ fn spectator_update( let mut set_focus = |focused: bool| { *focus = focused; - let grab_mode = match focused { - true => CursorGrabMode::Confined, - false => CursorGrabMode::None, - }; - window.cursor.grab_mode = grab_mode; - window.cursor.visible = !focused; + if !settings.orthographic { + let grab_mode = match focused { + true => CursorGrabMode::Confined, + false => CursorGrabMode::None, + }; + window.cursor.grab_mode = grab_mode; + window.cursor.visible = !focused; + } }; if keys.just_pressed(KeyCode::Escape) { @@ -117,9 +119,10 @@ fn spectator_update( set_focus(true); } - if *focus { + // When in orthographic mode, mouse capturing is disabled. Movement should therefore always be enabled. + if *focus || settings.orthographic { // rotation - { + if !settings.orthographic { let mouse_delta = { let mut total = Vec2::ZERO; for d in motion.read() { @@ -147,12 +150,12 @@ fn spectator_update( let backward = if keys.pressed(KeyCode::S) { 1f32 } else { 0f32 }; let right = if keys.pressed(KeyCode::D) { 1f32 } else { 0f32 }; let left = if keys.pressed(KeyCode::A) { 1f32 } else { 0f32 }; - let up = if keys.pressed(KeyCode::Space) { + let up = if keys.pressed(KeyCode::Space) || (settings.orthographic && keys.pressed(KeyCode::W)) { 1f32 } else { 0f32 }; - let down = if keys.pressed(KeyCode::ControlLeft) { + let down = if keys.pressed(KeyCode::ControlLeft) || (settings.orthographic && keys.pressed(KeyCode::S)) { 1f32 } else { 0f32 @@ -164,7 +167,7 @@ fn spectator_update( settings.base_speed }; - let delta_axial = (forward - backward) * speed; + let delta_axial = if settings.orthographic { 0f32 } else { (forward - backward) * speed }; let delta_lateral = (right - left) * speed; let delta_vertical = (up - down) * speed; @@ -214,6 +217,10 @@ pub struct SpectatorSettings { /// /// Use this to control how fast the [`Spectator`] turns when you move the mouse. pub sensitivity: f32, + /// Use a control scheme more fit for orthographic (2D) rendering + /// + /// Disables mouse capturing and hiding, prevents moving along z-axis and uses W and S for y-axis movement + pub orthographic: bool, } impl Default for SpectatorSettings { @@ -224,6 +231,7 @@ impl Default for SpectatorSettings { base_speed: 10.0, alt_speed: 50.0, sensitivity: 0.001, + orthographic: false, } } } From 88de89f3887dcf15ae97c31fe11d4490ff5e47e5 Mon Sep 17 00:00:00 2001 From: Jonah Henriksson <33059163+JonahPlusPlus@users.noreply.github.com> Date: Thu, 9 Nov 2023 23:47:13 -0500 Subject: [PATCH 2/6] Maintain code style Co-authored-by: Hennadii Chernyshchyk --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 0044e22..8915a7f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -167,7 +167,7 @@ fn spectator_update( settings.base_speed }; - let delta_axial = if settings.orthographic { 0f32 } else { (forward - backward) * speed }; + let delta_axial = if settings.orthographic { 0.0 } else { (forward - backward) * speed }; let delta_lateral = (right - left) * speed; let delta_vertical = (up - down) * speed; From 2b8a62c6a486eccf2d973be748e87c5b5a0b5db4 Mon Sep 17 00:00:00 2001 From: Jonah Henriksson <33059163+JonahPlusPlus@users.noreply.github.com> Date: Fri, 10 Nov 2023 00:44:32 -0500 Subject: [PATCH 3/6] Formatting --- examples/2d_scene.rs | 2 +- src/lib.rs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/examples/2d_scene.rs b/examples/2d_scene.rs index 472149b..6c54c8e 100644 --- a/examples/2d_scene.rs +++ b/examples/2d_scene.rs @@ -22,4 +22,4 @@ fn setup(mut commands: Commands) { }, ..default() }); -} \ No newline at end of file +} diff --git a/src/lib.rs b/src/lib.rs index 8915a7f..1ae8309 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -150,12 +150,16 @@ fn spectator_update( let backward = if keys.pressed(KeyCode::S) { 1f32 } else { 0f32 }; let right = if keys.pressed(KeyCode::D) { 1f32 } else { 0f32 }; let left = if keys.pressed(KeyCode::A) { 1f32 } else { 0f32 }; - let up = if keys.pressed(KeyCode::Space) || (settings.orthographic && keys.pressed(KeyCode::W)) { + let up = if keys.pressed(KeyCode::Space) + || (settings.orthographic && keys.pressed(KeyCode::W)) + { 1f32 } else { 0f32 }; - let down = if keys.pressed(KeyCode::ControlLeft) || (settings.orthographic && keys.pressed(KeyCode::S)) { + let down = if keys.pressed(KeyCode::ControlLeft) + || (settings.orthographic && keys.pressed(KeyCode::S)) + { 1f32 } else { 0f32 @@ -167,7 +171,11 @@ fn spectator_update( settings.base_speed }; - let delta_axial = if settings.orthographic { 0.0 } else { (forward - backward) * speed }; + let delta_axial = if settings.orthographic { + 0.0 + } else { + (forward - backward) * speed + }; let delta_lateral = (right - left) * speed; let delta_vertical = (up - down) * speed; @@ -218,7 +226,7 @@ pub struct SpectatorSettings { /// Use this to control how fast the [`Spectator`] turns when you move the mouse. pub sensitivity: f32, /// Use a control scheme more fit for orthographic (2D) rendering - /// + /// /// Disables mouse capturing and hiding, prevents moving along z-axis and uses W and S for y-axis movement pub orthographic: bool, } From f45801e749736c91b72e2da9fc631e069302de3e Mon Sep 17 00:00:00 2001 From: Jonah Henriksson <33059163+JonahPlusPlus@users.noreply.github.com> Date: Fri, 10 Nov 2023 01:04:00 -0500 Subject: [PATCH 4/6] Updated examples --- Cargo.toml | 1 + examples/2d_scene.rs | 7 ++++--- examples/3d_scene.rs | 3 +-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 961f374..445723b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ bevy = { version = "0.12", default-features = false, features = [ "bevy_core_pipeline", "bevy_pbr", "bevy_render", + "bevy_sprite", "x11", "ktx2", "zstd", diff --git a/examples/2d_scene.rs b/examples/2d_scene.rs index 6c54c8e..2a0aa0a 100644 --- a/examples/2d_scene.rs +++ b/examples/2d_scene.rs @@ -1,3 +1,5 @@ +//! A simple 2D scene using orthographic controls. + use bevy::prelude::*; use bevy_spectator::*; @@ -7,9 +9,8 @@ fn main() { orthographic: true, ..default() }) - .add_plugins(DefaultPlugins) - .add_plugin(SpectatorPlugin) - .add_startup_system(setup) + .add_plugins((DefaultPlugins, SpectatorPlugin)) + .add_systems(Startup, setup) .run(); } diff --git a/examples/3d_scene.rs b/examples/3d_scene.rs index 5a1066d..a0f6515 100644 --- a/examples/3d_scene.rs +++ b/examples/3d_scene.rs @@ -11,8 +11,7 @@ fn main() { sensitivity: 0.0015, ..default() }) - .add_plugins(DefaultPlugins) - .add_plugins(SpectatorPlugin) + .add_plugins((DefaultPlugins, SpectatorPlugin)) .add_systems(Startup, setup) .run(); } From cba178e0f8650d58ecd044971584dad70c4ded36 Mon Sep 17 00:00:00 2001 From: Jonah Henriksson <33059163+JonahPlusPlus@users.noreply.github.com> Date: Fri, 10 Nov 2023 01:11:10 -0500 Subject: [PATCH 5/6] Prevent space and ctrl in orthographic mode --- src/lib.rs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1ae8309..13e438f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -150,16 +150,24 @@ fn spectator_update( let backward = if keys.pressed(KeyCode::S) { 1f32 } else { 0f32 }; let right = if keys.pressed(KeyCode::D) { 1f32 } else { 0f32 }; let left = if keys.pressed(KeyCode::A) { 1f32 } else { 0f32 }; - let up = if keys.pressed(KeyCode::Space) - || (settings.orthographic && keys.pressed(KeyCode::W)) - { + let up = if { + if !settings.orthographic { + keys.pressed(KeyCode::Space) + } else { + keys.pressed(KeyCode::W) + } + } { 1f32 } else { 0f32 }; - let down = if keys.pressed(KeyCode::ControlLeft) - || (settings.orthographic && keys.pressed(KeyCode::S)) - { + let down = if { + if !settings.orthographic { + keys.pressed(KeyCode::ControlLeft) + } else { + keys.pressed(KeyCode::S) + } + } { 1f32 } else { 0f32 From a3984b13dfc4f2181dab8c278ccecbb6a8f72264 Mon Sep 17 00:00:00 2001 From: Jonah Henriksson <33059163+JonahPlusPlus@users.noreply.github.com> Date: Fri, 10 Nov 2023 01:18:12 -0500 Subject: [PATCH 6/6] Fix clippy warning --- src/lib.rs | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 13e438f..4af62b1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -150,28 +150,18 @@ fn spectator_update( let backward = if keys.pressed(KeyCode::S) { 1f32 } else { 0f32 }; let right = if keys.pressed(KeyCode::D) { 1f32 } else { 0f32 }; let left = if keys.pressed(KeyCode::A) { 1f32 } else { 0f32 }; - let up = if { - if !settings.orthographic { - keys.pressed(KeyCode::Space) - } else { - keys.pressed(KeyCode::W) - } - } { - 1f32 + let up_cond = if !settings.orthographic { + keys.pressed(KeyCode::Space) } else { - 0f32 + keys.pressed(KeyCode::W) }; - let down = if { - if !settings.orthographic { - keys.pressed(KeyCode::ControlLeft) - } else { - keys.pressed(KeyCode::S) - } - } { - 1f32 + let up = if up_cond { 1f32 } else { 0f32 }; + let down_cond = if !settings.orthographic { + keys.pressed(KeyCode::ControlLeft) } else { - 0f32 + keys.pressed(KeyCode::S) }; + let down = if down_cond { 1f32 } else { 0f32 }; let speed = if keys.pressed(KeyCode::ShiftLeft) { settings.alt_speed