瀏覽代碼

-fixed bodyenter/bodyexit callback of physics bodies, fixes #1739

Juan Linietsky 10 年之前
父節點
當前提交
79d5b7f258
共有 2 個文件被更改,包括 20 次插入7 次删除
  1. 13 3
      scene/2d/physics_body_2d.cpp
  2. 7 4
      scene/3d/physics_body.cpp

+ 13 - 3
scene/2d/physics_body_2d.cpp

@@ -277,6 +277,13 @@ void RigidBody2D::_body_inout(int p_status, ObjectID p_instance, int p_body_shap
 
 
 	Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(objid);
 	Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(objid);
 
 
+	/*if (obj) {
+		if (body_in)
+			print_line("in: "+String(obj->call("get_name")));
+		else
+			print_line("out: "+String(obj->call("get_name")));
+	}*/
+
 	ERR_FAIL_COND(!body_in && !E);
 	ERR_FAIL_COND(!body_in && !E);
 
 
 	if (body_in) {
 	if (body_in) {
@@ -386,14 +393,14 @@ void RigidBody2D::_direct_state_changed(Object *p_state) {
 			ObjectID obj = state->get_contact_collider_id(i);
 			ObjectID obj = state->get_contact_collider_id(i);
 			int local_shape = state->get_contact_local_shape(i);
 			int local_shape = state->get_contact_local_shape(i);
 			int shape = state->get_contact_collider_shape(i);
 			int shape = state->get_contact_collider_shape(i);
-			toadd[i].local_shape=local_shape;
-			toadd[i].id=obj;
-			toadd[i].shape=shape;
 
 
 //			bool found=false;
 //			bool found=false;
 
 
 			Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(obj);
 			Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(obj);
 			if (!E) {
 			if (!E) {
+				toadd[toadd_count].local_shape=local_shape;
+				toadd[toadd_count].id=obj;
+				toadd[toadd_count].shape=shape;
 				toadd_count++;
 				toadd_count++;
 				continue;
 				continue;
 			}
 			}
@@ -402,6 +409,9 @@ void RigidBody2D::_direct_state_changed(Object *p_state) {
 			int idx = E->get().shapes.find(sp);
 			int idx = E->get().shapes.find(sp);
 			if (idx==-1) {
 			if (idx==-1) {
 
 
+				toadd[toadd_count].local_shape=local_shape;
+				toadd[toadd_count].id=obj;
+				toadd[toadd_count].shape=shape;
 				toadd_count++;
 				toadd_count++;
 				continue;
 				continue;
 			}
 			}

+ 7 - 4
scene/3d/physics_body.cpp

@@ -338,14 +338,14 @@ void RigidBody::_direct_state_changed(Object *p_state) {
 			ObjectID obj = state->get_contact_collider_id(i);
 			ObjectID obj = state->get_contact_collider_id(i);
 			int local_shape = state->get_contact_local_shape(i);
 			int local_shape = state->get_contact_local_shape(i);
 			int shape = state->get_contact_collider_shape(i);
 			int shape = state->get_contact_collider_shape(i);
-			toadd[i].local_shape=local_shape;
-			toadd[i].id=obj;
-			toadd[i].shape=shape;
 
 
-			bool found=false;
+//			bool found=false;
 
 
 			Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(obj);
 			Map<ObjectID,BodyState>::Element *E=contact_monitor->body_map.find(obj);
 			if (!E) {
 			if (!E) {
+				toadd[toadd_count].local_shape=local_shape;
+				toadd[toadd_count].id=obj;
+				toadd[toadd_count].shape=shape;
 				toadd_count++;
 				toadd_count++;
 				continue;
 				continue;
 			}
 			}
@@ -354,6 +354,9 @@ void RigidBody::_direct_state_changed(Object *p_state) {
 			int idx = E->get().shapes.find(sp);
 			int idx = E->get().shapes.find(sp);
 			if (idx==-1) {
 			if (idx==-1) {
 
 
+				toadd[toadd_count].local_shape=local_shape;
+				toadd[toadd_count].id=obj;
+				toadd[toadd_count].shape=shape;
 				toadd_count++;
 				toadd_count++;
 				continue;
 				continue;
 			}
 			}