Merge pull request #21653 from piratesephiroth/master

fix 2d stop_on_slope  (issue #21595)
This commit is contained in:
Rémi Verschelde 2018-12-14 16:41:49 +01:00 committed by GitHub
commit 1fb47046bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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,15 +1305,10 @@ 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);
}
}
if (p_stop_on_slope)
break;