diff options
author | piratesephiroth <piratesephiroth@users.noreply.github.com> | 2018-09-01 07:33:07 -0300 |
---|---|---|
committer | RĂ©mi Verschelde <rverschelde@gmail.com> | 2018-12-14 16:02:43 +0100 |
commit | 0e94afbc92b43e95e37fe4dafe96cf183686b151 (patch) | |
tree | 2ae9cf0e1d1ca14d373c2bfcb0118a8dbb5955c8 | |
parent | 84d2ef43adffa5a28123cc2d24208b3d0b6569fb (diff) |
fix stop_on_slope affecting sliding up slopes
-rw-r--r-- | scene/2d/physics_body_2d.cpp | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index d6b301e10d..c440512c84 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -1279,7 +1279,6 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const colliders.push_back(collision); motion = collision.remainder; - bool is_on_slope = false; if (p_floor_direction == Vector2()) { //all is a wall on_wall = true; @@ -1291,7 +1290,7 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const floor_velocity = collision.collider_vel; if (p_stop_on_slope) { - if (Vector2() == lv_n + p_floor_direction) { + if (Vector2() == lv_n + p_floor_direction && collision.travel.length() < 1) { Transform2D gt = get_global_transform(); gt.elements[2] -= collision.travel.project(p_floor_direction.tangent()); set_global_transform(gt); @@ -1299,8 +1298,6 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const } } - is_on_slope = true; - } else if (collision.normal.dot(-p_floor_direction) >= Math::cos(p_floor_max_angle + FLOOR_ANGLE_THRESHOLD)) { //ceiling on_ceiling = true; } else { @@ -1308,14 +1305,9 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const } } - if (p_stop_on_slope && is_on_slope) { - motion = motion.slide(p_floor_direction); - lv = lv.slide(p_floor_direction); - } else { - Vector2 n = collision.normal; - motion = motion.slide(n); - lv = lv.slide(n); - } + Vector2 n = collision.normal; + motion = motion.slide(n); + lv = lv.slide(n); } if (p_stop_on_slope) |