diff options
author | Eric Wiltfang <mail@eric-wiltfang.de> | 2017-11-20 01:42:44 +0100 |
---|---|---|
committer | Eric Wiltfang <mail@eric-wiltfang.de> | 2017-11-20 01:42:44 +0100 |
commit | 7dd9e5c57cec3d93ab6a359559d5a79e87d5bf4a (patch) | |
tree | c9139d0c99299bf7c9ac7aa36e47e8272f942675 | |
parent | ecf80fbbbadaa782cbe81a6562916331c6762970 (diff) |
Fix the prevention for sliding on slopes in the 2d version of move_and_slide
Done by using the same method the 3d counterpart uses.
Fixes #13063.
-rw-r--r-- | scene/2d/physics_body_2d.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 1287a800e3..1f6127e6eb 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -1028,7 +1028,10 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const on_floor = true; floor_velocity = collision.collider_vel; - if (collision.travel.length() < 1 && ABS((lv.x - floor_velocity.x)) < p_slope_stop_min_velocity) { + Vector2 rel_v = lv - floor_velocity; + Vector2 hv = rel_v - p_floor_direction * p_floor_direction.dot(rel_v); + + if (collision.travel.length() < 1 && hv.length() < p_slope_stop_min_velocity) { Transform2D gt = get_global_transform(); gt.elements[2] -= collision.travel; set_global_transform(gt); |