diff --git a/engine/physics/src/physics.rs b/engine/physics/src/physics.rs index b226795ff..a4a2488ab 100644 --- a/engine/physics/src/physics.rs +++ b/engine/physics/src/physics.rs @@ -601,12 +601,17 @@ impl MoveState{ fn cull_velocity(&mut self,velocity:Planar64Vec3,body:&mut Body,touching:&mut TouchingState,models:&PhysicsModels,hitbox_mesh:&HitboxMesh,style:&StyleModifiers,camera:&PhysicsCamera,input_state:&InputState){ //TODO: be more precise about contacts if set_velocity_cull(body,touching,models,hitbox_mesh,velocity){ - //TODO do better + // TODO do better + // TODO: unduplicate this code match self.get_walk_state(){ - //did you stop touching the thing you were walking on? + // did you stop touching the thing you were walking on? Some(walk_state)=>if !touching.contacts.contains(&walk_state.contact){ self.set_move_state(MoveState::Air,body,touching,models,hitbox_mesh,style,camera,input_state); + }else{ + // stopped touching something else while walking + self.apply_enum_and_input_and_body(body,touching,models,hitbox_mesh,style,camera,input_state); }, + // not walking, but stopped touching something None=>self.apply_enum_and_body(body,touching,models,hitbox_mesh,style,camera,input_state), } } @@ -1620,10 +1625,14 @@ fn collision_end_contact( //TODO do better //this is inner code from move_state.cull_velocity match move_state.get_walk_state(){ - //did you stop touching the thing you were walking on? + // did you stop touching the thing you were walking on? Some(walk_state)=>if walk_state.contact==contact{ move_state.set_move_state(MoveState::Air,body,touching,models,hitbox_mesh,style,camera,input_state); + }else{ + // stopped touching something else while walking + move_state.apply_enum_and_input_and_body(body,touching,models,hitbox_mesh,style,camera,input_state); }, + // not walking, but stopped touching something None=>move_state.apply_enum_and_body(body,touching,models,hitbox_mesh,style,camera,input_state), } }