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