From cd81f4260d3b5fd33c15cbf822ec4effea3de4bf Mon Sep 17 00:00:00 2001 From: extrawurst Date: Thu, 20 Mar 2025 17:59:54 +0100 Subject: [PATCH] fix look around with gamepad --- src/camera.rs | 27 +++++++++++++++++++++++++-- src/main.rs | 2 +- src/player.rs | 26 ++++++++++++++++++++------ 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/camera.rs b/src/camera.rs index a227966..16c450d 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -37,7 +37,7 @@ pub fn plugin(app: &mut App) { app.register_type::(); app.init_resource::(); app.add_systems(Startup, startup); - app.add_systems(Update, (update, rotate_view)); + app.add_systems(Update, (update, rotate_view_keyboard, rotate_view_gamepad)); } fn startup(mut commands: Commands) { @@ -92,7 +92,7 @@ fn update( *cam_transform = Transform::from_translation(cam_pos).looking_at(target, Vec3::Y); } -fn rotate_view( +fn rotate_view_keyboard( mut controls: ResMut, mut cam: Query<&mut CameraRotation>, movement: Res, @@ -105,6 +105,7 @@ fn rotate_view( if movement.any_direction { cam.0 = 0.; } + return; } @@ -112,3 +113,25 @@ fn rotate_view( controls.keyboard_state.look_dir = Vec2::ZERO; } + +fn rotate_view_gamepad( + controls: Res, + mut cam: Query<&mut CameraRotation>, + movement: Res, +) { + let Ok(mut cam) = cam.get_single_mut() else { + return; + }; + + let Some(gamepad) = controls.gamepad_state else { + return; + }; + + if !gamepad.view_mode { + if movement.any_direction { + cam.0 = 0.; + } + } else { + cam.0 += gamepad.look_dir.x * -0.001; + } +} diff --git a/src/main.rs b/src/main.rs index cf1a3b0..876b17a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,7 +56,7 @@ fn main() { app.add_plugins(DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { title: "HEDZ reloaded".into(), - resolution: (1024., 768.).into(), + // resolution: (1024., 768.).into(), ..default() }), ..default() diff --git a/src/player.rs b/src/player.rs index ebf768e..568163a 100644 --- a/src/player.rs +++ b/src/player.rs @@ -56,7 +56,7 @@ pub fn plugin(app: &mut App) { apply_controls.in_set(TnuaUserControlsSystemSet), ); - app.add_systems(Update, rotate_view); + app.add_systems(Update, (rotate_view_keyboard, rotate_view_gamepad)); app.add_observer(update_head); } @@ -126,7 +126,25 @@ fn spawn( player_spawned.spawned = true; } -fn rotate_view( +fn rotate_view_gamepad( + controls: Res, + // todo: Put the player head as a child of the rig to avoid this mess: + mut player: Query<&mut Transform, With>, +) { + let Some(gamepad) = controls.gamepad_state else { + return; + }; + + if gamepad.view_mode { + return; + } + + for mut tr in &mut player { + tr.rotate_y(gamepad.look_dir.x * -0.001); + } +} + +fn rotate_view_keyboard( mut controls: ResMut, // todo: Put the player head as a child of the rig to avoid this mess: mut player: Query<&mut Transform, With>, @@ -137,10 +155,6 @@ fn rotate_view( for mut tr in &mut player { tr.rotate_y(controls.keyboard_state.look_dir.x * -0.001); - - if let Some(gamepad) = controls.gamepad_state { - tr.rotate_y(gamepad.look_dir.x * -0.001); - } } controls.keyboard_state.look_dir = Vec2::ZERO;