public List <PropertyModifier> GetPropertyModifiers(int level, int forgeLevel, float multiplier = 1) { var modifiers = new List <PropertyModifier>(); foreach (var propertyModifierCurveData in this.data.Properties) { var property = this.propertyRepository.Find(propertyModifierCurveData.PropertyId); var amount = Curve.Evaluate( level, propertyModifierCurveData.Min, propertyModifierCurveData.Max, propertyModifierCurveData.CurveType) * (property.IsUnscalable ? 1 : multiplier); amount *= Quality; var forge = Curve.Evaluate( forgeLevel, propertyModifierCurveData.Min, propertyModifierCurveData.Max, propertyModifierCurveData.CurveType) * (property.IsUnscalable ? 1 : multiplier); if (property.IsFractional()) { forge *= 0.25f; } amount += forge; var propertyData = new PropertyModifierData { PropertyId = property.Id, Type = ModifierType.Flat, Amount = amount }; modifiers.Add(new PropertyModifier(property, propertyData)); } modifiers.AddRange(ItemModifiers.SelectMany(m => m.GetPropertyModifiers(level, forgeLevel, multiplier))); return(modifiers); }
public PropertyModifier Make(PropertyModifierData data) { return(new PropertyModifier(this.propertyRepository.Find(data.PropertyId), data)); }
public PropertyModifier(Property property, PropertyModifierData data) : base(data.Amount, data.Type) { Property = property; Data = data; }