Merge pull request #45160 from madmiraal/fix-45145-3.2

[3.2] Only remove Bullet's body constraints when removing body from space
This commit is contained in:
Rémi Verschelde
2021-01-13 17:16:01 +01:00
committed by GitHub
3 changed files with 8 additions and 2 deletions

View File

@@ -338,7 +338,8 @@ void RigidBodyBullet::set_space(SpaceBullet *p_space) {
if (space) {
can_integrate_forces = false;
isScratchedSpaceOverrideModificator = false;
// Remove any constraints
space->remove_rigid_body_constraints(this);
// Remove this object form the physics world
space->remove_rigid_body(this);
}

View File

@@ -497,7 +497,7 @@ void SpaceBullet::add_rigid_body(RigidBodyBullet *p_body) {
}
}
void SpaceBullet::remove_rigid_body(RigidBodyBullet *p_body) {
void SpaceBullet::remove_rigid_body_constraints(RigidBodyBullet *p_body) {
btRigidBody *btBody = p_body->get_bt_rigid_body();
int constraints = btBody->getNumConstraintRefs();
@@ -507,6 +507,10 @@ void SpaceBullet::remove_rigid_body(RigidBodyBullet *p_body) {
dynamicsWorld->removeConstraint(btBody->getConstraintRef(i));
}
}
}
void SpaceBullet::remove_rigid_body(RigidBodyBullet *p_body) {
btRigidBody *btBody = p_body->get_bt_rigid_body();
if (p_body->is_static()) {
dynamicsWorld->removeCollisionObject(btBody);

View File

@@ -149,6 +149,7 @@ public:
void reload_collision_filters(AreaBullet *p_area);
void add_rigid_body(RigidBodyBullet *p_body);
void remove_rigid_body_constraints(RigidBodyBullet *p_body);
void remove_rigid_body(RigidBodyBullet *p_body);
void reload_collision_filters(RigidBodyBullet *p_body);