]> git.seodisparate.com - EntityComponentMetaSystem/commitdiff
Fixed bug where deleted entities retain info
authorStephen Seo <seo.disparate@gmail.com>
Tue, 30 Aug 2016 08:34:34 +0000 (17:34 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Tue, 30 Aug 2016 08:34:34 +0000 (17:34 +0900)
src/EC/Manager.hpp
src/test/ECTest.cpp

index fa3fab9cff127afbd3b66e6f012d35cceec2ce57..aa44a797f6641386efa7a8f4924fb8669f88f3f5 100644 (file)
@@ -80,9 +80,6 @@ namespace EC
 
             std::get<bool>(entities[currentSize]) = true;
 
-            // TODO This shouldn't be necessary, but there is a bug
-            std::get<BitsetType>(entities[currentSize]).reset();
-
             return currentSize++;
         }
 
@@ -143,6 +140,7 @@ namespace EC
                         currentSize = 0;
                         return;
                     }
+                    std::get<BitsetType>(entities[rhs]).reset();
                     --rhs;
                 }
                 if(lhs >= rhs)
index f76651077746642119fa86f9f31b21b31ec091bc..ee72cd2640982957fe0ded9de2ef67e07b3c40cd 100644 (file)
@@ -207,3 +207,38 @@ TEST(EC, MoveComponentWithUniquePtr)
     }
 }
 
+TEST(EC, DeletedEntities)
+{
+    EC::Manager<ListComponentsAll, ListTagsAll> manager;
+
+    for(unsigned int i = 0; i < 4; ++i)
+    {
+        auto eid = manager.addEntity();
+        manager.addComponent<C0>(eid);
+        if(i >= 2)
+        {
+            manager.deleteEntity(eid);
+        }
+    }
+
+    manager.cleanup();
+
+    for(unsigned int i = 0; i < 4; ++i)
+    {
+        if(i < 2)
+        {
+            EXPECT_TRUE(manager.hasComponent<C0>(i));
+        }
+        else
+        {
+            EXPECT_FALSE(manager.hasComponent<C0>(i));
+        }
+    }
+
+    for(unsigned int i = 0; i < 2; ++i)
+    {
+        auto eid = manager.addEntity();
+        EXPECT_FALSE(manager.hasComponent<C0>(eid));
+    }
+}
+