示例#1
0
        internal void DestroyEntity(Entity entity)
        {
            if (entity.MarkedToBeRemoved)
            {
                return;
            }

            foreach (KeyValuePair <Type, BaseComponent> entityAttachedComponent in entity.AttachedComponents)
            {
                DetachComponent(entity, entityAttachedComponent.Key);
            }

            entity.MarkedToBeRemoved = true;
            EntitiesForRemoving.Enqueue(entity);
        }
示例#2
0
        /// <summary>
        /// Dispatches entity removing logic
        /// </summary>
        internal void ProcessEntitiesForRemoving()
        {
            while (EntitiesForRemoving.Count != 0)
            {
                Entity entity = EntitiesForRemoving.Dequeue();

                entity.AttachedComponents.Clear();
                _freeIds.Enqueue(entity.Id);

                Entities.Remove(entity.Id);

                OnEntityRemoved?.Invoke(entity);
                entity.MarkedToBeRemoved = false;
                entity.Service           = null;
            }
        }