summaryrefslogtreecommitdiff
path: root/modules/bullet
diff options
context:
space:
mode:
authorAndrea Catania <info@andreacatania.com>2018-08-26 12:09:52 +0200
committerAndrea Catania <info@andreacatania.com>2018-08-26 12:09:52 +0200
commit64b5eaf43c55ec7e40d67bad6d877196189c3b7f (patch)
treefd5756c218cb4caf9d7185ff5372006dc4b78cdc /modules/bullet
parent2e722caeadeb20285ea077417e6e67baf354e6c1 (diff)
Correctly set safe_motion on cast_motion query Fixes: #21212
Diffstat (limited to 'modules/bullet')
-rw-r--r--modules/bullet/space_bullet.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp
index b5329bc347..4a11bec5af 100644
--- a/modules/bullet/space_bullet.cpp
+++ b/modules/bullet/space_bullet.cpp
@@ -178,7 +178,9 @@ bool BulletPhysicsDirectSpaceState::cast_motion(const RID &p_shape, const Transf
space->dynamicsWorld->convexSweepTest(bt_convex_shape, bt_xform_from, bt_xform_to, btResult, 0.002);
if (btResult.hasHit()) {
- p_closest_safe = p_closest_unsafe = btResult.m_closestHitFraction;
+ const btScalar l = bt_motion.length();
+ p_closest_unsafe = btResult.m_closestHitFraction;
+ p_closest_safe = MAX(p_closest_unsafe - (1 - ((l - 0.01) / l)), 0);
if (r_info) {
if (btCollisionObject::CO_RIGID_BODY == btResult.m_hitCollisionObject->getInternalType()) {
B_TO_G(static_cast<const btRigidBody *>(btResult.m_hitCollisionObject)->getVelocityInLocalPoint(btResult.m_hitPointWorld), r_info->linear_velocity);