From 47341f7c5659e4621f809b8fce93bceadc10110f Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 31 Mar 2024 16:31:01 +0200 Subject: [PATCH 1/3] save --- crates/border-wars/src/camera.rs | 36 ++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/crates/border-wars/src/camera.rs b/crates/border-wars/src/camera.rs index 6c2b50b..8d5ac73 100644 --- a/crates/border-wars/src/camera.rs +++ b/crates/border-wars/src/camera.rs @@ -46,7 +46,11 @@ impl Plugin for CameraPlugin { fn build(&self, app: &mut App) { app.add_systems(Startup, init_camera) .add_systems(Startup, init_resources_for_camera) - .add_systems(Update, movement_system.run_if(in_state(CurrentScene::Game))) + .add_systems( + Update, + (keyboard_movement_system, mouse_movement_system) + .run_if(in_state(CurrentScene::Game)), + ) .add_systems(Update, scale_system.run_if(in_state(CurrentScene::Game))); } } @@ -78,7 +82,7 @@ fn init_resources_for_camera(mut commands: Commands) { } /// Moves the camera with keyboard input. -fn movement_system( +fn keyboard_movement_system( mut query: Query<&mut Transform, With>, keys: Res>, keys_settings: Res, @@ -100,6 +104,34 @@ fn movement_system( } } +fn mouse_movement_system( + mouse_button_input: Res>, + mut query: Query<&mut Transform, With>, + windows: Query<&Window>, + mut last_position: Local>, +) { + let window = windows.get_single().expect("Main window not found"); + let Some(position) = window.cursor_position() else { + return; + }; + + if mouse_button_input.just_pressed(MouseButton::Right) { + *last_position = Some(position.clone()); + } + + if mouse_button_input.just_released(MouseButton::Right) { + *last_position = None; + } + + if let Some(old_position) = *last_position { + for mut transform in query.iter_mut() { + let offset = (old_position - position).extend(0.0) * Vec3::new(1., -1., 1.); + transform.translation += offset; + } + *last_position = Some(position); + } +} + /// Scales the view with mouse input. fn scale_system( mut scroll_event: EventReader, -- 2.43.4 From 0acab67a6798a353e8308b0da6035b139413ff2d Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 31 Mar 2024 16:33:12 +0200 Subject: [PATCH 2/3] add doc --- crates/border-wars/src/camera.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/border-wars/src/camera.rs b/crates/border-wars/src/camera.rs index 8d5ac73..29c193b 100644 --- a/crates/border-wars/src/camera.rs +++ b/crates/border-wars/src/camera.rs @@ -104,6 +104,7 @@ fn keyboard_movement_system( } } +/// Moves the camera with mouse input. fn mouse_movement_system( mouse_button_input: Res>, mut query: Query<&mut Transform, With>, -- 2.43.4 From 631eb6b5c22871e38a4a66c3df2f480213baea76 Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 31 Mar 2024 16:33:37 +0200 Subject: [PATCH 3/3] removge unless clone() --- crates/border-wars/src/camera.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/border-wars/src/camera.rs b/crates/border-wars/src/camera.rs index 29c193b..c19a3e2 100644 --- a/crates/border-wars/src/camera.rs +++ b/crates/border-wars/src/camera.rs @@ -117,7 +117,7 @@ fn mouse_movement_system( }; if mouse_button_input.just_pressed(MouseButton::Right) { - *last_position = Some(position.clone()); + *last_position = Some(position); } if mouse_button_input.just_released(MouseButton::Right) { -- 2.43.4