jumping, character controller fixes

This commit is contained in:
TudbuT 2024-11-23 21:42:35 +01:00
parent 6956df3d3b
commit 126325de8f
3 changed files with 20 additions and 12 deletions

View file

@ -58,30 +58,37 @@ fn move_player(
&mut KinematicCharacterController, &mut KinematicCharacterController,
)>, )>,
mut camera_query: Query<&mut Transform, (With<Camera2d>, Without<Player>)>, mut camera_query: Query<&mut Transform, (With<Camera2d>, Without<Player>)>,
phys: Query<&KinematicCharacterControllerOutput>,
player_coords: Res<PlayerCoords>,
time: Res<Time>, time: Res<Time>,
) { ) {
let (mut vel, p_transform, mut player, mut controller) = query.single_mut(); let (mut vel, p_transform, mut player, mut controller) = query.single_mut();
let (mut cam_transform) = camera_query.single_mut(); let (mut cam_transform) = camera_query.single_mut();
let (output) = phys.get_single();
if player.move_cooldown.tick(time.delta()).finished() { if player.move_cooldown.tick(time.delta()).finished() {
let mut moved = false; let mut moved = false;
let mut mv = 0; let mut move_x = 0;
let mut move_y = 0;
let mut jump = false; let mut jump = false;
if kb_input.pressed(KeyCode::KeyA) { if kb_input.pressed(KeyCode::KeyA) {
moved = true; moved = true;
mv -= 1; move_x -= 1;
} }
if kb_input.pressed(KeyCode::KeyD) { if kb_input.pressed(KeyCode::KeyD) {
moved = true; moved = true;
mv += 1; move_x += 1;
}
if kb_input.pressed(KeyCode::Space) && output.is_ok_and(|x| x.grounded) {
moved = true;
move_y += 1;
} }
let orig = cam_transform.translation; let orig = cam_transform.translation;
cam_transform.translation -= ((orig - p_transform.translation.xy().extend(0.0)) / 30.0); cam_transform.translation -= ((orig - p_transform.translation.xy().extend(0.0)) / 30.0);
if moved { controller.translation = Some(Vec2::new(move_x as f32 * 6., 0. - 0.01));
controller.translation = Some(Vec2::new(mv as f32 * 6., 0.)); vel.linvel += Vec2::new(0., move_y as f32 * 3. * METER);
}
} }
} }
@ -142,6 +149,7 @@ fn add_player(
.insert(( .insert((
RigidBody::Dynamic, RigidBody::Dynamic,
player_coords.get_collider(), player_coords.get_collider(),
LockedAxes::ROTATION_LOCKED,
Velocity::default(), Velocity::default(),
)) ))
.insert(KinematicCharacterController { .insert(KinematicCharacterController {
@ -159,7 +167,7 @@ fn add_player(
//max_slope_climb_angle: todo!(), //max_slope_climb_angle: todo!(),
//min_slope_slide_angle: todo!(), //min_slope_slide_angle: todo!(),
//apply_impulse_to_dynamic_bodies: todo!(), //apply_impulse_to_dynamic_bodies: todo!(),
// snap_to_ground: Some(CharacterLength::Absolute(100.0)), snap_to_ground: Some(CharacterLength::Absolute(0.5)),
//filter_flags: todo!(), //filter_flags: todo!(),
//filter_groups: todo!(), //filter_groups: todo!(),
// normal_nudge_factor: 1., // normal_nudge_factor: 1.,

View file

@ -19,9 +19,9 @@ struct Block;
#[derive(Resource, Default, Clone, Copy)] #[derive(Resource, Default, Clone, Copy)]
pub struct PlayerCoords { pub struct PlayerCoords {
x: f32, pub x: f32,
y: f32, pub y: f32,
block_size: f32, pub block_size: f32,
} }
impl PlayerCoords { impl PlayerCoords {

View file

@ -5,7 +5,7 @@ use game::game_plugin;
mod game; mod game;
const METER: f32 = 30.; const METER: f32 = 60.;
#[derive(States, Debug, Clone, PartialEq, Eq, Hash, Default)] #[derive(States, Debug, Clone, PartialEq, Eq, Hash, Default)]
enum AppState { enum AppState {
@ -26,7 +26,7 @@ fn main() {
let rapier_config = RapierConfiguration { let rapier_config = RapierConfiguration {
scaled_shape_subdivision: 10, scaled_shape_subdivision: 10,
timestep_mode: TimestepMode::Variable { timestep_mode: TimestepMode::Variable {
max_dt: 0.1, max_dt: 0.5,
time_scale: 1.0, time_scale: 1.0,
substeps: 20, substeps: 20,
}, },