summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpiratesephiroth <piratesephiroth@users.noreply.github.com>2018-09-01 07:33:07 -0300
committerRĂ©mi Verschelde <rverschelde@gmail.com>2018-12-14 16:02:43 +0100
commit0e94afbc92b43e95e37fe4dafe96cf183686b151 (patch)
tree2ae9cf0e1d1ca14d373c2bfcb0118a8dbb5955c8
parent84d2ef43adffa5a28123cc2d24208b3d0b6569fb (diff)
fix stop_on_slope affecting sliding up slopes
-rw-r--r--scene/2d/physics_body_2d.cpp16
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)