/// <summary> /// Remove all StatModifierInstances of the given StatModifier from the given source. /// </summary> /// <param name="modifier">given StatModifier</param> /// <param name="source">given source</param> /// <returns>true if changed</returns> public bool RemoveModifier(StatModifier modifier, IStatModifierSource source) { if (modifier.attributeType.Type != attributeType.Type) { return(false); } if (_modifiers.TryGetValue(modifier.modifierType, out var statModifierInstances)) { var removed = 0; for (var i = statModifierInstances.Count - 1; i >= 0; i--) { var instance = statModifierInstances[i]; if (instance.Matches(modifier, source)) { instance.Modifier.value.RemoveListener(OnDependencyChange); statModifierInstances.RemoveAt(i); removed++; } } if (removed > 0) { MarkDirty(); return(true); } } return(false); }
public virtual void AddAllModifierFromSource(IStatModifierSource source) { foreach (var mod in source.GetAllModifiers().Where(w => w.StatType == Type)) { statModifiers.Add(mod); } }
/// <summary> /// Remove all StatModifierInstances from the given source. /// </summary> /// <param name="source">given source</param> /// <returns>true if changed</returns> public bool RemoveModifiers(IStatModifierSource source) { var removed = 0; foreach (var statModifierInstances in _modifiers.Values) { for (var i = statModifierInstances.Count - 1; i >= 0; i--) { var instance = statModifierInstances[i]; if (instance.Matches(source)) { instance.Modifier.value.RemoveListener(OnDependencyChange); statModifierInstances.RemoveAt(i); removed++; } } } if (removed > 0) { MarkDirty(); return(true); } return(false); }
protected virtual void AddModifiersFromSource(IStatModifierSource source) { foreach (var s in stats) { s.AddAllModifierFromSource(source); } }
/// <summary> /// Remove this modifier from the first matching StatAttribute. /// </summary> /// <param name="source">source</param> /// <param name="holders">holders to check</param> /// <returns>success</returns> public bool RemoveModifier(IStatModifierSource source, params AttributeHolder[] holders) { foreach (var holder in holders) { if (holder.TryGetAttribute <StatAttribute>(attributeType, out var attribute) && RemoveModifier(source, attribute)) { return(true); } } return(false); }
/// <summary> /// Add a new StatModifier. /// </summary> /// <param name="modifier">new StatModifier</param> /// <param name="source">modifier source</param> /// <returns>true if changed</returns> public bool AddModifier(StatModifier modifier, IStatModifierSource source) { if (modifier.attributeType.Type != attributeType.Type) { return(false); } if (!_modifiers.TryGetValue(modifier.modifierType, out var statModifiers)) { statModifiers = new List <StatModifierInstance>(); _modifiers.Add(modifier.modifierType, statModifiers); } var instance = new StatModifierInstance(modifier, this, source); statModifiers.Add(instance); modifier.value.AddListener(OnDependencyChange); MarkDirty(); return(true); }
public virtual int RemoveAllModifiersFromSource(IStatModifierSource source) { isDirty = true; return(statModifiers.RemoveAll(w => w.Source == source)); }
public bool Matches(IStatModifierSource source) { return(Source == source); }
public bool Matches(StatModifier modifier, IStatModifierSource source) { return(Modifier == modifier && Source == source); }
public StatModifierInstance(StatModifier modifier, StatAttribute attribute, IStatModifierSource source) { Modifier = modifier; Attribute = attribute; Source = source; }
/// <summary> /// Remove this modifier to the given attribute. /// </summary> /// <param name="source">source</param> /// <param name="attribute">attribute</param> /// <returns>success</returns> public bool RemoveModifier(IStatModifierSource source, StatAttribute attribute) { return(attribute != null && attribute.RemoveModifier(this, source)); }
/// <summary> /// Apply this modifier to the given attribute. /// </summary> /// <param name="source">source</param> /// <param name="attribute">attribute</param> /// <returns>success</returns> public bool ApplyModifier(IStatModifierSource source, StatAttribute attribute) { return(attribute != null && attribute.AddModifier(this, source)); }