From 47341f7c5659e4621f809b8fce93bceadc10110f Mon Sep 17 00:00:00 2001 From: CoCo_Sol Date: Sun, 31 Mar 2024 16:31:01 +0200 Subject: [PATCH] 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,