Skip to content

Commit

Permalink
Merge pull request #54302 from fabriceci/fix-2D-character-stuck-on-wall
Browse files Browse the repository at this point in the history
Fix #54298 where a CharacterBody2D can be stuck on the wall.
  • Loading branch information
pouleyKetchoupp authored Oct 27, 2021
2 parents 5fadebe + ee3e43c commit a1092d1
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 12 deletions.
15 changes: 4 additions & 11 deletions scene/2d/physics_body_2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1101,7 +1101,7 @@ bool CharacterBody2D::move_and_slide() {
}

if (motion_mode == MOTION_MODE_GROUNDED) {
_move_and_slide_grounded(delta, was_on_floor, current_platform_velocity);
_move_and_slide_grounded(delta, was_on_floor);
} else {
_move_and_slide_free(delta);
}
Expand All @@ -1122,14 +1122,11 @@ bool CharacterBody2D::move_and_slide() {
return motion_results.size() > 0;
}

void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_floor, const Vector2 &p_prev_platform_velocity) {
void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_floor) {
Vector2 motion = motion_velocity * p_delta;
Vector2 motion_slide_up = motion.slide(up_direction);

Vector2 prev_floor_normal = floor_normal;
RID prev_platform_rid = platform_rid;
ObjectID prev_platform_object_id = platform_object_id;
int prev_platform_layer = platform_layer;

platform_rid = RID();
platform_object_id = ObjectID();
Expand Down Expand Up @@ -1202,12 +1199,8 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
gt.elements[2] -= result.travel;
set_global_transform(gt);
}
on_floor = true;
platform_rid = prev_platform_rid;
platform_object_id = prev_platform_object_id;
platform_layer = prev_platform_layer;
platform_velocity = p_prev_platform_velocity;
floor_normal = prev_floor_normal;
// Determines if you are on the ground.
_snap_on_floor(true, false);
motion_velocity = Vector2();
last_motion = Vector2();
motion = Vector2();
Expand Down
2 changes: 1 addition & 1 deletion scene/2d/physics_body_2d.h
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ class CharacterBody2D : public PhysicsBody2D {
MovingPlatformApplyVelocityOnLeave get_moving_platform_apply_velocity_on_leave() const;

void _move_and_slide_free(double p_delta);
void _move_and_slide_grounded(double p_delta, bool p_was_on_floor, const Vector2 &p_prev_platform_velocity);
void _move_and_slide_grounded(double p_delta, bool p_was_on_floor);

Ref<KinematicCollision2D> _get_slide_collision(int p_bounce);
Ref<KinematicCollision2D> _get_last_slide_collision();
Expand Down

0 comments on commit a1092d1

Please sign in to comment.