/// <summary>
        /// Registers a component of type <typeparamref name="T"/> and assigns it to the target <see cref="SharperEntity"/>.
        /// </summary>
        /// <param name="component">The instantiated component to register.</param>
        /// <returns>Returns a <see cref="Task"/> that represents the registration work.</returns>
        public Task RegisterComponentAsync(T component)
        {
            Components.Add(component);

            ComponentRegistered?.Invoke(this, new SharperComponentEventArgs(component));
            return(Task.CompletedTask);
        }
 public Task RegisterComponentsAsync(params BaseSharperComponent[] components)
 {
     foreach (var component in components)
     {
         Components.Add((T)component);
         ComponentRegistered?.Invoke(this, new SharperComponentEventArgs(component));
     }
     return(Task.CompletedTask);
 }
Пример #3
0
 /// <summary>
 /// Register a component
 /// </summary>
 /// <param name="component">Component to be registered.</param>
 public void RegisterComponent(IComponent component)
 {
     lock (ComponentsLock) {
         if (!ComponentList.Any(x => x.Id == component.Id))
         {
             ComponentList.Add(component);
             ComponentRegistered?.Invoke(this, component);
         }
     }
 }
Пример #4
0
 public void RegisterComponent(SubscribableBehaviour behaviour)
 {
     Debug.Log($"Registering {behaviour} in ComponentContainer {this}.");
     if (!_objectDictionary.ContainsKey(behaviour.GetType()))
     {
         _objectDictionary.Add(behaviour.GetType(), behaviour);
         behaviour.Destroyed += UnregisterComponent;
         ComponentRegistered?.Invoke(behaviour);
     }
     else
     {
         Debug.LogWarning($"Already registered {behaviour} in ComponentContainer {this}.");
     }
 }
Пример #5
0
        /// <summary>
        /// Registers a component of type <typeparamref name="T"/> and assigns it to the target <see cref="SharperEntity"/>.
        /// </summary>
        /// <param name="entity">The target entity.</param>
        /// <param name="args">the values for the new component.</param>
        /// <returns>Returns a <see cref="Task"/> that represents the registration work.</returns>
        public Task RegisterComponentAsync(SharperEntity entity, params object[] args)
        {
            var inputArr = new object[args.Length + 1];

            inputArr[0] = entity;

            for (int i = 1; i < inputArr.Length; i++)
            {
                inputArr[i] = args[i - 1];
            }

            T component = (T)Activator.CreateInstance(typeof(T), inputArr);

            Components.Add(component);

            ComponentRegistered?.Invoke(this, new SharperComponentEventArgs(component));
            return(Task.CompletedTask);
        }