Move removal of the constraints from bodies to Joint3DSW destructor

Joint3DSW instances are also destroyed without explicitly calling free()
for example when changing constrainted bodies at runtime using
set_node method.
This commit is contained in:
Eryk Dwornicki 2021-02-27 17:55:19 +01:00
parent 0e8fae1038
commit aa42e8920b
2 changed files with 9 additions and 3 deletions

View File

@ -49,6 +49,15 @@ public:
_FORCE_INLINE_ Joint3DSW(Body3DSW **p_body_ptr = nullptr, int p_body_count = 0) :
Constraint3DSW(p_body_ptr, p_body_count) {
}
virtual ~Joint3DSW() {
for (int i = 0; i < get_body_count(); i++) {
Body3DSW *body = get_body_ptr()[i];
if (body) {
body->remove_constraint(this);
}
}
}
};
#endif // JOINTS_SW_H

View File

@ -1312,9 +1312,6 @@ void PhysicsServer3DSW::free(RID p_rid) {
} else if (joint_owner.owns(p_rid)) {
Joint3DSW *joint = joint_owner.getornull(p_rid);
for (int i = 0; i < joint->get_body_count(); i++) {
joint->get_body_ptr()[i]->remove_constraint(joint);
}
joint_owner.free(p_rid);
memdelete(joint);