예제 #1
0
        /// <summary>
        /// Removes trait consumer
        /// </summary>
        /// <param name="traitConsumer">Trait consumer</param>
        internal void RemoveTraitConsumer([NotNull] TraitConsumer traitConsumer)
        {
            var requiredTraits = TypeCacher.consumerType2RequiredTypes[traitConsumer.GetType()];

            foreach (var traitType in requiredTraits)
            {
                traitManager[traitType].RemoveConsumer(traitConsumer);
            }
        }
예제 #2
0
                /// <summary>
                /// Adds consumer to consumers set if <see cref="providers"/> contains at least one provider
                /// </summary>
                /// <param name="consumer">Consumer component</param>
                /// <returns>
                /// Providers: dictionary of part and function to retrieve trait
                /// or null if no providers exist and consumer was not added
                /// </returns>
                public bool AddConsumer([NotNull] TraitConsumer consumer)
                {
                    var providersExist = providers.Count > 0;

                    if (providersExist)
                    {
                        consumers.Add(consumer);
                        return(true);
                    }

                    return(false);
                }
예제 #3
0
        /// <summary>
        /// Adds trait consumer in case providers of that trait exist
        /// </summary>
        /// <param name="traitConsumer">Trait consumer</param>
        /// <returns>True if consumer added, false otherwise</returns>
        internal bool AddTraitConsumer([NotNull] TraitConsumer traitConsumer)
        {
            var requiredTraits = TypeCacher.consumerType2RequiredTypes[traitConsumer.GetType()];

            if (requiredTraits.All(type => traitManager[type].AddConsumer(traitConsumer)))
            {
                return(true);
            }

            foreach (var requiredTrait in requiredTraits)
            {
                traitManager[requiredTrait].RemoveConsumer(traitConsumer);
            }
            return(false);
        }
예제 #4
0
 /// <summary>
 /// Removes consumer from set without deleting component
 /// </summary>
 /// <param name="consumer">Consumer component</param>
 public void RemoveConsumer([NotNull] TraitConsumer consumer)
 {
     consumers.Remove(consumer);
 }