Quellcode durchsuchen

Remove all elements from monitored_bodies and monitored_areas when processed

Marcel Admiraal vor 4 Jahren
Ursprung
Commit
03cddd36db
2 geänderte Dateien mit 12 neuen und 4 gelöschten Zeilen
  1. 6 2
      servers/physics/area_sw.cpp
  2. 6 2
      servers/physics_2d/area_2d_sw.cpp

+ 6 - 2
servers/physics/area_sw.cpp

@@ -192,7 +192,9 @@ void AreaSW::call_queries() {
 		for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
 
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_bodies.erase(E);
+				E = next;
 				continue;
 			}
 
@@ -228,7 +230,9 @@ void AreaSW::call_queries() {
 		for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
 
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_areas.erase(E);
+				E = next;
 				continue;
 			}
 

+ 6 - 2
servers/physics_2d/area_2d_sw.cpp

@@ -192,7 +192,9 @@ void Area2DSW::call_queries() {
 		for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
 
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_bodies.erase(E);
+				E = next;
 				continue;
 			}
 
@@ -228,7 +230,9 @@ void Area2DSW::call_queries() {
 		for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
 
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_areas.erase(E);
+				E = next;
 				continue;
 			}