コード例 #1
0
        public static void Modify(ItemPropertyModifier source, ref double targetValue)
        {
            if (!source.HasValue)
            {
                return;
            }

            switch (source._formula)
            {
            // mod & inverse
            case AggregateFormula.Modifier:
            case AggregateFormula.Inverse:
            {
                targetValue *= source.Value;
                break;
            }

            // add
            case AggregateFormula.Add:
            {
                targetValue += source.Value;
                break;
            }

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #2
0
        public ItemPropertyModifier GetPropertyModifier(AggregateField field)
        {
            if (TryGetPropertyModifier(field, out ItemPropertyModifier m))
            {
                return(m);
            }

            return(ItemPropertyModifier.Create(field));
        }
コード例 #3
0
 public void Init()
 {
     _modifiers = Db.Query().CommandText("select * from aggregatevalues").Execute().ToLookup(r => r.GetValue <int>("definition"), r =>
     {
         var field = r.GetValue <AggregateField>("field");
         var value = r.GetValue <double>("value");
         return(ItemPropertyModifier.Create(field, value));
     });
 }
コード例 #4
0
 static DefaultItemPropertyModifiers()
 {
     _defaultProperties = Database.CreateLookupCache <int, ItemPropertyModifier>("aggregatevalues", "definition", r =>
     {
         var field = r.GetValue <AggregateField>("field");
         var value = r.GetValue <double>("value");
         return(ItemPropertyModifier.Create(field, value));
     });
 }
コード例 #5
0
        public static ItemPropertyModifier Modify(ItemPropertyModifier source, ItemPropertyModifier target)
        {
            if (!source.HasValue)
            {
                return(target);
            }

            var v = target.Value;

            Modify(source, ref v);
            return(new ItemPropertyModifier(target.Field, target._formula, v));
        }
コード例 #6
0
 public static void Modify(ItemPropertyModifier source, ref ItemPropertyModifier targetModifier)
 {
     targetModifier = Modify(source, targetModifier);
 }
コード例 #7
0
 public void Modify(ref ItemPropertyModifier targetModifier)
 {
     Modify(this, ref targetModifier);
 }
コード例 #8
0
 public bool TryGetPropertyModifier(AggregateField field, out ItemPropertyModifier modifier)
 {
     return(_modifiers.TryGetValue(field, out modifier));
 }
コード例 #9
0
        public static IPropertyModifierCollection Combine(this IPropertyModifierCollection source, IPropertyModifierCollection target)
        {
            var x = source.All.Select(s => ItemPropertyModifier.Modify(s, target.GetPropertyModifier(s.Field)));

            return(new PropertyModifierCollection(x));
        }
コード例 #10
0
 public ItemPropertyModifier ToPropertyModifier()
 {
     return(ItemPropertyModifier.Create(Field, Value));
 }