Browse Source

Fix crash in body_test_motion when used with RigidBody3D in Bullet

Kinematic utilities are now initialized for a rigid body if needed for a
call to body_test_motion.
PouleyKetchoupp 4 years ago
parent
commit
db47b670f6
1 changed files with 10 additions and 0 deletions
  1. 10 0
      modules/bullet/space_bullet.cpp

+ 10 - 0
modules/bullet/space_bullet.cpp

@@ -965,6 +965,11 @@ bool SpaceBullet::test_body_motion(RigidBodyBullet *p_body, const Transform &p_f
 	G_TO_B(p_from, body_transform);
 	UNSCALE_BT_BASIS(body_transform);
 
+	if (!p_body->get_kinematic_utilities()) {
+		p_body->init_kinematic_utilities();
+		p_body->reload_kinematic_shapes();
+	}
+
 	btVector3 initial_recover_motion(0, 0, 0);
 	{ /// Phase one - multi shapes depenetration using margin
 		for (int t(RECOVERING_MOVEMENT_CYCLES); 0 < t; --t) {
@@ -1087,6 +1092,11 @@ int SpaceBullet::test_ray_separation(RigidBodyBullet *p_body, const Transform &p
 	G_TO_B(p_transform, body_transform);
 	UNSCALE_BT_BASIS(body_transform);
 
+	if (!p_body->get_kinematic_utilities()) {
+		p_body->init_kinematic_utilities();
+		p_body->reload_kinematic_shapes();
+	}
+
 	btVector3 recover_motion(0, 0, 0);
 
 	int rays_found = 0;