From 8531a9b8c189f6f9b4d2bc4512d72f0ebe95ac47 Mon Sep 17 00:00:00 2001 From: hut Date: Wed, 3 Apr 2024 12:26:56 +0200 Subject: [PATCH] fix position/rotation after exiting vehicle --- src/camera.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/camera.rs b/src/camera.rs index d4b5f89..5215fe8 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -5,7 +5,7 @@ use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings}; use bevy::core_pipeline::tonemapping::Tonemapping; use bevy::pbr::CascadeShadowConfigBuilder; use bevy::transform::TransformSystem; -use bevy::math::DVec3; +use bevy::math::{DVec3, DQuat}; use bevy_xpbd_3d::prelude::*; use std::f32::consts::PI; use crate::{settings, audio, actor}; @@ -113,8 +113,8 @@ pub fn handle_input( fn manage_player_actor( settings: Res, mut q_playercam: Query<&mut Visibility, With>, - mut q_hiddenplayer: Query<(&mut Visibility, &mut Transform, &mut LinearVelocity, &mut AngularVelocity), (With, Without)>, - q_ride: Query<(&Transform, &LinearVelocity, &AngularVelocity), (With, Without)>, + mut q_hiddenplayer: Query<(&mut Visibility, &mut Position, &mut Rotation, &mut LinearVelocity, &mut AngularVelocity), (With, Without)>, + q_ride: Query<(&Transform, &Position, &Rotation, &LinearVelocity, &AngularVelocity), (With, Without)>, ) { for mut vis in &mut q_playercam { if settings.third_person { @@ -124,11 +124,11 @@ fn manage_player_actor( *vis = Visibility::Hidden; } } - for (mut vis, mut trans, mut v, mut angv) in &mut q_hiddenplayer { + for (mut vis, mut pos, mut rot, mut v, mut angv) in &mut q_hiddenplayer { *vis = Visibility::Hidden; - if let Ok((ride_trans, ride_v, ride_angv)) = q_ride.get_single() { - trans.translation = ride_trans.translation + Vec3::new(0.0, 0.0, 10.0); - trans.rotation = ride_trans.rotation; + if let Ok((ride_trans, ride_pos, ride_rot, ride_v, ride_angv)) = q_ride.get_single() { + pos.0 = ride_pos.0 + DVec3::from(ride_trans.rotation * Vec3::new(0.0, 0.0, 10.0)); + rot.0 = ride_rot.0 * DQuat::from_array([-1.0, 0.0, 0.0, 0.0]); *v = ride_v.clone(); *angv = ride_angv.clone(); }