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:
parent
0e8fae1038
commit
aa42e8920b
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue