Fix movement getting slower when looking up/down
This commit is contained in:
parent
e31a473b3e
commit
b38d86f54f
1 changed files with 8 additions and 13 deletions
|
@ -1,7 +1,6 @@
|
|||
use bevy::{
|
||||
input::mouse::MouseMotion,
|
||||
prelude::*,
|
||||
render::camera::{PerspectiveProjection, VisibleEntities},
|
||||
};
|
||||
use bevy_rapier3d::{
|
||||
na::{clamp, wrap, Matrix3x1},
|
||||
|
@ -41,8 +40,6 @@ struct CameraData {
|
|||
|
||||
#[derive(Bundle)]
|
||||
pub struct PlayerBundle {
|
||||
pub perspective_projection: PerspectiveProjection,
|
||||
pub visible_entities: VisibleEntities,
|
||||
pub transform: Transform,
|
||||
pub global_transform: GlobalTransform,
|
||||
player_marker: PlayerMarker,
|
||||
|
@ -57,8 +54,6 @@ impl Default for PlayerBundle {
|
|||
.translation(0.0, 3.0, 0.0)
|
||||
.lock_rotations(),
|
||||
collider: ColliderBuilder::cylinder(PLAYER_HEIGHT / 2., PLAYER_WIDTH).friction(0.0),
|
||||
perspective_projection: Default::default(),
|
||||
visible_entities: Default::default(),
|
||||
transform: Default::default(),
|
||||
global_transform: Default::default(),
|
||||
player_marker: Default::default(),
|
||||
|
@ -94,12 +89,13 @@ fn player_movement_system(
|
|||
for camera_transform in camera_transform_query.iter() {
|
||||
for body_handle in player_query.iter_mut() {
|
||||
let body: &mut RigidBody = bodies.get_mut(body_handle.handle()).unwrap();
|
||||
|
||||
let axis_strafe = movement_axis(&keyboard_input, KeyCode::D, KeyCode::A);
|
||||
let axis_straight = movement_axis(&keyboard_input, KeyCode::S, KeyCode::W);
|
||||
|
||||
let rotation = camera_transform.rotation;
|
||||
let mut speed_2d: Vec3 =
|
||||
(strafe_vector(&rotation) * axis_strafe) + (forward_vector(&rotation) * axis_straight);
|
||||
(strafe_vector(&rotation) * axis_strafe) + (straight_vector(&rotation) * axis_straight);
|
||||
if speed_2d.length() != 0.0 {
|
||||
speed_2d = speed_2d.normalize() * PLAYER_SPEED;
|
||||
}
|
||||
|
@ -112,16 +108,15 @@ fn player_movement_system(
|
|||
}
|
||||
}
|
||||
|
||||
fn forward_vector(rotation: &Quat) -> Vec3 {
|
||||
rotation.mul_vec3(Vec3::unit_z()).normalize()
|
||||
fn straight_vector(rotation: &Quat) -> Vec3 {
|
||||
let v = rotation.mul_vec3(Vec3::unit_z());
|
||||
Vec3::new(v.x, 0.0, v.z).normalize()
|
||||
}
|
||||
|
||||
fn strafe_vector(rotation: &Quat) -> Vec3 {
|
||||
let f = forward_vector(rotation);
|
||||
let f_flattened = Vec3::new(f.x, 0.0, f.z).normalize();
|
||||
// Rotate it 90 degrees to get the strafe direction
|
||||
Quat::from_rotation_y(90.0f32.to_radians())
|
||||
.mul_vec3(f_flattened)
|
||||
let forward = straight_vector(rotation);
|
||||
Quat::from_rotation_y(FRAC_PI_2)
|
||||
.mul_vec3(forward)
|
||||
.normalize()
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue