From a5c796d491e812dbe945d4645ed35fe0996c3303 Mon Sep 17 00:00:00 2001 From: hut Date: Sat, 30 Mar 2024 15:37:51 +0100 Subject: [PATCH] tinkering on 3rd person mode --- Cargo.lock | 4 ++-- src/actor.rs | 8 +++----- src/camera.rs | 12 ++++++++---- src/world.rs | 1 + 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6ca954d..661c372 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2696,7 +2696,7 @@ dependencies = [ "downcast-rs", "either", "nalgebra", - "num-derive 0.4.2", + "num-derive", "num-traits", "rayon", "rustc-hash", @@ -2718,7 +2718,7 @@ dependencies = [ "downcast-rs", "either", "nalgebra", - "num-derive 0.4.2", + "num-derive", "num-traits", "rayon", "rustc-hash", diff --git a/src/actor.rs b/src/actor.rs index ce451e3..8486dac 100644 --- a/src/actor.rs +++ b/src/actor.rs @@ -76,7 +76,7 @@ impl Default for Actor { v: Vec3::ZERO, inside_entity: NO_RIDE, angular_momentum: Quat::from_euler(EulerRot::XYZ, 0.001, 0.01, 0.003), - camdistance: 10.0, + camdistance: 15.0, } } } @@ -306,10 +306,9 @@ pub fn handle_vehicle_enter_exit( if vehicle == event.vehicle { if event.is_entering { // Entering Vehicle - ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::EnterVehicle)); *driver_vis = Visibility::Hidden; - *driver_trans = vehicle_trans.clone(); if event.is_player { + ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::EnterVehicle)); //player_actor.inside_entity = entity.index(); *vehicle_vis = Visibility::Hidden; driver_actor.v = vehicle_actor.v; @@ -320,9 +319,9 @@ pub fn handle_vehicle_enter_exit( } else { // Exiting Vehicle - ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Switch)); *driver_vis = Visibility::Inherited; if event.is_player { + ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Switch)); *vehicle_vis = Visibility::Inherited; vehicle_actor.v = driver_actor.v; vehicle_actor.angular_momentum = driver_actor.angular_momentum; @@ -333,7 +332,6 @@ pub fn handle_vehicle_enter_exit( } else { *driver_trans = vehicle_trans.clone(); - *driver_trans = vehicle_trans.clone(); } } } diff --git a/src/camera.rs b/src/camera.rs index 56f97aa..15f9e88 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -75,7 +75,8 @@ pub fn handle_input( fn manage_player_actor( settings: Res, - mut q_playercam: Query<&mut Visibility, With> + mut q_playercam: Query<&mut Visibility, With>, + mut q_hiddenplayer: Query<&mut Visibility, (With, Without)>, ) { for mut vis in &mut q_playercam { if settings.third_person { @@ -85,6 +86,9 @@ fn manage_player_actor( *vis = Visibility::Hidden; } } + for mut vis in &mut q_hiddenplayer { + *vis = Visibility::Hidden; + } } #[allow(clippy::too_many_arguments)] @@ -219,12 +223,12 @@ fn run_camera_controller( + mouse_delta.y * RADIANS_PER_DOT * controller.sensitivity) .clamp(-PI / 2., PI / 2.); controller.yaw += mouse_delta.x * RADIANS_PER_DOT * controller.sensitivity; - player_transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, -controller.yaw, controller.pitch); - camera_transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, PI-controller.yaw, -controller.pitch); + player_transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, -controller.yaw, controller.pitch).normalize(); + camera_transform.rotation = Quat::from_euler(EulerRot::ZYX, 0.0, PI-controller.yaw, -controller.pitch).normalize(); } if settings.third_person { - camera_transform.translation = player_transform.translation + camera_transform.rotation * Vec3::new(0.0, 0.0, actor.camdistance); + camera_transform.translation = player_transform.translation + camera_transform.rotation * (actor.camdistance * Vec3::new(0.0, 0.2, 1.0)); } else { camera_transform.translation = player_transform.translation; diff --git a/src/world.rs b/src/world.rs index 2d18c8f..b78fbec 100644 --- a/src/world.rs +++ b/src/world.rs @@ -41,6 +41,7 @@ impl Plugin for WorldPlugin { //app.add_systems(Update, asset_loaded.after(load_cubemap_asset)); //app.add_systems(Update, swap_world_on_ar_toggle); app.add_plugins(PhysicsPlugins::default()); + //app.add_plugins(PhysicsDebugPlugin::default()); app.insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))); app.insert_resource(Gravity(Vec3::splat(0.0))); }