switch to rapier character controller
it already supports custom gravity and custom up direction
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user