public void TestCreateEntity_CreateEntityDeleteItAndRecreateAgain_NewCreatedEntityHasNoComponents() { // Test to fix issue #18 https://github.com/bnoazx005/TinyECS/issues/18 EntityId entityId = mWorldContext.CreateEntity(); IEntity entity = mWorldContext.GetEntityById(entityId); Assert.IsNotNull(entity); entity.AddComponent <TTestComponent>(); entity.AddComponent <TAnotherComponent>(); Assert.IsTrue(mWorldContext.DestroyEntity(entityId)); // recreate entity entityId = mWorldContext.CreateEntity(); entity = mWorldContext.GetEntityById(entityId); // recreated entity should be empty Assert.IsNotNull(entity); Assert.IsTrue(!entity.HasComponent <TTestComponent>() && !entity.HasComponent <TAnotherComponent>()); }
/// <summary> /// The system is an update one that destroys all disposable entities at an end of a frame /// </summary> /// <param name="worldContext"></param> /// <param name="dt"></param> public static void DisposableEntitiesCollectorSystem(IWorldContext worldContext, float dt) { var disposableEntities = worldContext.GetEntitiesWithAll(typeof(TDisposableComponent)); for (int i = 0; i < disposableEntities.Count; ++i) { IEntity currEntity = worldContext.GetEntityById(disposableEntities[i]); if (currEntity.HasComponent <TEntityLifetimeComponent>()) { TEntityLifetimeComponent lifetimeData = currEntity.GetComponent <TEntityLifetimeComponent>(); currEntity.AddComponent(new TEntityLifetimeComponent { mCounter = lifetimeData.mCounter - 1 }); if (lifetimeData.mCounter > 0) { continue; } } worldContext.DestroyEntity(disposableEntities[i]); } }