예제 #1
0
        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>());
        }
예제 #2
0
        /// <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]);
            }
        }