/// <summary> /// Dispatches components removing logic /// </summary> internal void ProcessComponentsForRemoving() { while (ComponentsForRemoving.Count != 0) { BaseComponent component = ComponentsForRemoving.Dequeue(); foreach (BaseComponentSystem baseComponentSystem in DrawSystems) { if (baseComponentSystem.IsAppliableComponent(component)) { baseComponentSystem.UnregisterComponent(component); } } foreach (BaseComponentSystem baseComponentSystem in UpdateSystems) { if (baseComponentSystem.IsAppliableComponent(component)) { baseComponentSystem.UnregisterComponent(component); } } // perform manual resetting of internal caching variable for transform component if (component.GetType() == typeof(Transform2DComponent)) { component.SourceEntity._transform = null; } component.SourceEntity.AttachedComponents.Remove(component.GetType()); component.MarkedToBeRemoved = false; component.SourceEntity = null; } }
internal void DetachComponent(Entity entity, Type componentType) { BaseComponent component = entity.AttachedComponents[componentType]; component.MarkedToBeRemoved = true; ComponentsForRemoving.Enqueue(component); }