/// <summary> /// Adds trait provider component /// </summary> /// <param name="part"></param> /// <param name="provider"></param> public void AddProvider([NotNull] CharacterPart part, [NotNull] Getter provider) { if (providers.ContainsKey(part)) { return; } providers.Add(part, provider); }
internal void RemovePart([NotNull] CharacterPart part) { if (parts.Remove(part)) { foreach (var(type, _) in TypeCacher.type2ProvidedTypes[part.GetType()]) { traitManager[type].RemoveProvider(part); } } }
internal void AddPart([NotNull] CharacterPart part) { if (parts.Contains(part)) { return; } parts.Add(part); foreach (var(type, provider) in TypeCacher.type2ProvidedTypes[part.GetType()]) { traitManager[type].AddProvider(part, provider.Substitute(part)); } }
/// <summary> /// Removes provider also destroying consumer components, if no providers left /// </summary> /// <param name="part"></param> public void RemoveProvider([NotNull] CharacterPart part) { if (part == null) { throw new ArgumentNullException(nameof(part)); } if (providers.ContainsKey(part)) { providers.Remove(part); if (providers.Count == 0) { foreach (var traitConsumer in consumers) { consumers.Remove(traitConsumer); traitConsumer.OnProvidersEmpty(); } } } }