예제 #1
0
        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);
        }
예제 #2
0
 public PropertyModifier Make(PropertyModifierData data)
 {
     return(new PropertyModifier(this.propertyRepository.Find(data.PropertyId), data));
 }
예제 #3
0
 public PropertyModifier(Property property, PropertyModifierData data) : base(data.Amount, data.Type)
 {
     Property = property;
     Data     = data;
 }