From d94c76a19930a4f6f83ad56b38b41eaa563f9571 Mon Sep 17 00:00:00 2001 From: Bojidar Marinov Date: Thu, 15 Mar 2018 14:29:22 +0200 Subject: [PATCH] Make it possible to call move_and_slide from _process, even if it is not recommended Previously, it would reuse the _physics_process delta, causing it to move faster on faster framerates Fixes #17516 --- scene/2d/physics_body_2d.cpp | 3 ++- scene/3d/physics_body.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp index 33c5fef1517..761a2002eee 100644 --- a/scene/2d/physics_body_2d.cpp +++ b/scene/2d/physics_body_2d.cpp @@ -1237,7 +1237,8 @@ Vector2 KinematicBody2D::move_and_slide(const Vector2 &p_linear_velocity, const } } - Vector2 motion = (floor_motion + p_linear_velocity) * get_physics_process_delta_time(); + // Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky + Vector2 motion = (floor_motion + p_linear_velocity) * (Engine::get_singleton()->is_in_physics_frame() ? get_physics_process_delta_time() : get_process_delta_time()); Vector2 lv = p_linear_velocity; on_floor = false; diff --git a/scene/3d/physics_body.cpp b/scene/3d/physics_body.cpp index 038d8169512..c1b0852c7cb 100644 --- a/scene/3d/physics_body.cpp +++ b/scene/3d/physics_body.cpp @@ -1167,7 +1167,8 @@ Vector3 KinematicBody::move_and_slide(const Vector3 &p_linear_velocity, const Ve } } - Vector3 motion = (floor_velocity + lv) * get_physics_process_delta_time(); + // Hack in order to work with calling from _process as well as from _physics_process; calling from thread is risky + Vector3 motion = (floor_velocity + lv) * (Engine::get_singleton()->is_in_physics_frame() ? get_physics_process_delta_time() : get_process_delta_time()); on_floor = false; on_ceiling = false;