switch to rapier character controller
it already supports custom gravity and custom up direction
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
use avian3d::prelude::*;
|
||||
use bevy::{input::mouse::MouseMotion, prelude::*};
|
||||
use bevy_rapier3d::prelude::*;
|
||||
|
||||
use crate::{components::tags::Ship, utils::input::get_mouse_delta};
|
||||
|
||||
@@ -14,21 +14,12 @@ impl Plugin for ShipPlugin {
|
||||
}
|
||||
|
||||
fn ship_controls(
|
||||
ship_query: Single<
|
||||
(
|
||||
&Transform,
|
||||
&mut LinearVelocity,
|
||||
&mut AngularVelocity,
|
||||
&mut LinearDamping,
|
||||
&mut AngularDamping,
|
||||
),
|
||||
With<Ship>,
|
||||
>,
|
||||
ship_query: Single<(&Transform, &mut Velocity, &mut Damping), With<Ship>>,
|
||||
key: Res<ButtonInput<KeyCode>>,
|
||||
time: Res<Time>,
|
||||
mouse_motion: EventReader<MouseMotion>,
|
||||
) {
|
||||
let (transform, mut vel, mut ang, mut ldamp, mut adamp) = ship_query.into_inner();
|
||||
let (transform, mut vel, mut damp) = ship_query.into_inner();
|
||||
|
||||
let mut move_vec = Vec3::ZERO;
|
||||
|
||||
@@ -51,11 +42,11 @@ fn ship_controls(
|
||||
}
|
||||
|
||||
if key.pressed(KeyCode::ControlLeft) {
|
||||
ldamp.0 = 0.8;
|
||||
adamp.0 = 0.8;
|
||||
damp.linear_damping = 0.8;
|
||||
damp.angular_damping = 0.8;
|
||||
} else {
|
||||
ldamp.0 = 0.0;
|
||||
adamp.0 = 0.0;
|
||||
damp.linear_damping = 0.0;
|
||||
damp.angular_damping = 0.0;
|
||||
}
|
||||
|
||||
const ROLL_SPEED: f32 = 1.0;
|
||||
@@ -79,11 +70,11 @@ fn ship_controls(
|
||||
let roll = Vec3::NEG_Z * mouse_input.x;
|
||||
let pitch = Vec3::X * mouse_input.y;
|
||||
|
||||
ang.0 += (transform.rotation * (roll + yaw + pitch)) * time.delta_secs();
|
||||
vel.angvel += (transform.rotation * (roll + yaw + pitch)) * time.delta_secs();
|
||||
|
||||
move_vec = transform.rotation * move_vec.normalize_or_zero();
|
||||
|
||||
vel.0 += move_vec * time.delta_secs();
|
||||
vel.linvel += move_vec * time.delta_secs();
|
||||
}
|
||||
|
||||
#[cfg(feature = "dev-viz")]
|
||||
|
||||
Reference in New Issue
Block a user