Exemple #1
0
        /// <summary>
        /// Dispatches component registering logic
        /// </summary>
        internal void ProcessComponentsForRegistering()
        {
            while (ComponentsForRegistering.Count != 0)
            {
                BaseComponent component = ComponentsForRegistering.Dequeue();

                // call 'InitializeInternal' for every new component
                component.Initialize();

                foreach (BaseComponentSystem baseComponentSystem in DrawSystems)
                {
                    if (baseComponentSystem.IsAppliableComponent(component))
                    {
                        baseComponentSystem.RegisterComponent(component);
                    }
                }

                foreach (BaseComponentSystem baseComponentSystem in UpdateSystems)
                {
                    if (baseComponentSystem.IsAppliableComponent(component))
                    {
                        baseComponentSystem.RegisterComponent(component);
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Performs attaching pre-routine
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        internal T AttachComponent <T>(Entity entity) where T : BaseComponent, new()
        {
            T component = new T
            {
                SourceEntity = entity
            };

            entity.AttachedComponents[typeof(T)] = component;

            ComponentsForRegistering.Enqueue(component);

            return(component);
        }