diff options
Diffstat (limited to 'modules/bullet/bullet_physics_server.cpp')
| -rw-r--r-- | modules/bullet/bullet_physics_server.cpp | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp index 51de4998fa..b646fc164d 100644 --- a/modules/bullet/bullet_physics_server.cpp +++ b/modules/bullet/bullet_physics_server.cpp @@ -70,8 +70,8 @@  		return RID();                                                                             \  	} -#define AddJointToSpace(body, joint, disableCollisionsBetweenLinkedBodies) \ -	body->get_space()->add_constraint(joint, disableCollisionsBetweenLinkedBodies); +#define AddJointToSpace(body, joint) \ +	body->get_space()->add_constraint(joint, joint->is_disabled_collisions_between_bodies());  // <--------------- Joint creation asserts  btEmptyShape *BulletPhysicsServer::emptyShape(ShapeBullet::create_shape_empty()); @@ -987,6 +987,20 @@ int BulletPhysicsServer::joint_get_solver_priority(RID p_joint) const {  	return 0;  } +void BulletPhysicsServer::joint_disable_collisions_between_bodies(RID p_joint, const bool p_disable) { +	JointBullet *joint = joint_owner.get(p_joint); +	ERR_FAIL_COND(!joint); + +	joint->disable_collisions_between_bodies(p_disable); +} + +bool BulletPhysicsServer::joint_is_disabled_collisions_between_bodies(RID p_joint) const { +	JointBullet *joint(joint_owner.get(p_joint)); +	ERR_FAIL_COND_V(!joint, false); + +	return joint->is_disabled_collisions_between_bodies(); +} +  RID BulletPhysicsServer::joint_create_pin(RID p_body_A, const Vector3 &p_local_A, RID p_body_B, const Vector3 &p_local_B) {  	RigidBodyBullet *body_A = rigid_body_owner.get(p_body_A);  	ERR_FAIL_COND_V(!body_A, RID()); @@ -1003,7 +1017,7 @@ RID BulletPhysicsServer::joint_create_pin(RID p_body_A, const Vector3 &p_local_A  	ERR_FAIL_COND_V(body_A == body_B, RID());  	JointBullet *joint = bulletnew(PinJointBullet(body_A, p_local_A, body_B, p_local_B)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  } @@ -1071,7 +1085,7 @@ RID BulletPhysicsServer::joint_create_hinge(RID p_body_A, const Transform &p_hin  	ERR_FAIL_COND_V(body_A == body_B, RID());  	JointBullet *joint = bulletnew(HingeJointBullet(body_A, body_B, p_hinge_A, p_hinge_B)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  } @@ -1091,7 +1105,7 @@ RID BulletPhysicsServer::joint_create_hinge_simple(RID p_body_A, const Vector3 &  	ERR_FAIL_COND_V(body_A == body_B, RID());  	JointBullet *joint = bulletnew(HingeJointBullet(body_A, body_B, p_pivot_A, p_pivot_B, p_axis_A, p_axis_B)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  } @@ -1143,7 +1157,7 @@ RID BulletPhysicsServer::joint_create_slider(RID p_body_A, const Transform &p_lo  	ERR_FAIL_COND_V(body_A == body_B, RID());  	JointBullet *joint = bulletnew(SliderJointBullet(body_A, body_B, p_local_frame_A, p_local_frame_B)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  } @@ -1177,7 +1191,7 @@ RID BulletPhysicsServer::joint_create_cone_twist(RID p_body_A, const Transform &  	}  	JointBullet *joint = bulletnew(ConeTwistJointBullet(body_A, body_B, p_local_frame_A, p_local_frame_B)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  } @@ -1213,7 +1227,7 @@ RID BulletPhysicsServer::joint_create_generic_6dof(RID p_body_A, const Transform  	ERR_FAIL_COND_V(body_A == body_B, RID());  	JointBullet *joint = bulletnew(Generic6DOFJointBullet(body_A, body_B, p_local_frame_A, p_local_frame_B, true)); -	AddJointToSpace(body_A, joint, true); +	AddJointToSpace(body_A, joint);  	CreateThenReturnRID(joint_owner, joint);  }  |