Example #1
0
        /// <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;
            }
        }
Example #2
0
        internal void DetachComponent(Entity entity, Type componentType)
        {
            BaseComponent component = entity.AttachedComponents[componentType];

            component.MarkedToBeRemoved = true;

            ComponentsForRemoving.Enqueue(component);
        }