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,6 +1,7 @@
use bevy::prelude::*;
use bevy_rapier3d::prelude::*;
use crate::components::{character_controller::CharacterMotion, tags::Player};
use crate::components::tags::Player;
pub struct PlayerPlugin;
@@ -10,7 +11,12 @@ impl Plugin for PlayerPlugin {
}
}
fn keyboard_input(key: Res<ButtonInput<KeyCode>>, mut player: Single<&mut CharacterMotion, With<Player>>) {
fn keyboard_input(
key: Res<ButtonInput<KeyCode>>,
mut player: Single<(&mut KinematicCharacterController, &mut Transform), With<Player>>,
time: Res<Time>,
) {
let (mut controller, mut transform) = player.into_inner();
let mut move_vec = Vec3::ZERO;
if key.pressed(KeyCode::KeyW) {
@@ -25,5 +31,15 @@ fn keyboard_input(key: Res<ButtonInput<KeyCode>>, mut player: Single<&mut Charac
move_vec.x = 1.0;
}
player.0 = move_vec;
let angle = if key.pressed(KeyCode::KeyQ) {
-0.1
} else if key.pressed(KeyCode::KeyE) {
0.1
} else {
0.0
};
transform.rotate_z(angle * time.delta_secs());
controller.up = transform.up().as_vec3();
move_vec += transform.down().as_vec3();
controller.translation = Some(move_vec * time.delta_secs());
}