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); }
/// <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; } }