/// <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); } }
/// <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); }
/// <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); }
/// <summary> /// Removes consumer from set without deleting component /// </summary> /// <param name="consumer">Consumer component</param> public void RemoveConsumer([NotNull] TraitConsumer consumer) { consumers.Remove(consumer); }