switch to rapier character controller

it already supports custom gravity and custom up direction
This commit is contained in:
2025-06-23 21:20:42 -04:00
parent be745273e2
commit de8d52ff84
9 changed files with 119 additions and 163 deletions

View File

@@ -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")]