浏览代码

Remove joint freeing logic from physics servers

Since joint resources are created by joint nodes and also they take care of freeing them, the physics server doesn't need to free bodies' joints explicitly.

The logic for clearing the constraints map/set is still relevant as there may be collision pairs and in their case its the server itself the one creating them and therefore releasing them.

(cherry picked from commit fbeb27b01d2dd94c80f9ae8ecf1dfd69a1bb55a6)
Pedro J. Estébanez 8 年之前
父节点
当前提交
cc98dbff04
共有 2 个文件被更改,包括 0 次插入28 次删除
  1. 0 14
      servers/physics/physics_server_sw.cpp
  2. 0 14
      servers/physics_2d/physics_2d_server_sw.cpp

+ 0 - 14
servers/physics/physics_server_sw.cpp

@@ -232,14 +232,7 @@ void PhysicsServerSW::area_set_space(RID p_area, RID p_space) {
 	if (area->get_space() == space)
 	if (area->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	for (Set<ConstraintSW *>::Element *E = area->get_constraints().front(); E; E = E->next()) {
-		RID self = E->get()->get_self();
-		if (!self.is_valid())
-			continue;
-		free(self);
-	}
 	area->clear_constraints();
 	area->clear_constraints();
-
 	area->set_space(space);
 	area->set_space(space);
 };
 };
 
 
@@ -486,14 +479,7 @@ void PhysicsServerSW::body_set_space(RID p_body, RID p_space) {
 	if (body->get_space() == space)
 	if (body->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	for (Map<ConstraintSW *, int>::Element *E = body->get_constraint_map().front(); E; E = E->next()) {
-		RID self = E->key()->get_self();
-		if (!self.is_valid())
-			continue;
-		free(self);
-	}
 	body->clear_constraint_map();
 	body->clear_constraint_map();
-
 	body->set_space(space);
 	body->set_space(space);
 };
 };
 
 

+ 0 - 14
servers/physics_2d/physics_2d_server_sw.cpp

@@ -296,14 +296,7 @@ void Physics2DServerSW::area_set_space(RID p_area, RID p_space) {
 	if (area->get_space() == space)
 	if (area->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	for (Set<Constraint2DSW *>::Element *E = area->get_constraints().front(); E; E = E->next()) {
-		RID self = E->get()->get_self();
-		if (!self.is_valid())
-			continue;
-		free(self);
-	}
 	area->clear_constraints();
 	area->clear_constraints();
-
 	area->set_space(space);
 	area->set_space(space);
 };
 };
 
 
@@ -540,14 +533,7 @@ void Physics2DServerSW::body_set_space(RID p_body, RID p_space) {
 	if (body->get_space() == space)
 	if (body->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	for (Map<Constraint2DSW *, int>::Element *E = body->get_constraint_map().front(); E; E = E->next()) {
-		RID self = E->key()->get_self();
-		if (!self.is_valid())
-			continue;
-		free(self);
-	}
 	body->clear_constraint_map();
 	body->clear_constraint_map();
-
 	body->set_space(space);
 	body->set_space(space);
 };
 };