Exemple #1
0
        public T GetBonus <T>(TemporaryModifier.ModFor ApplyableFor,
                              summingTMethod <T> sumMethod,
                              T baseBonus = default(T))
            where T : IComparable
        {
#if ALL_BONUSES
            var modT = modifiers.Where(mod => { var attr = mod.GetType().GetCustomAttributes(typeof(ApplyableTo));
                                                return(attr.Count(a => ((ApplyableTo)a).What == ApplyableFor) > 0); })
                       .Where(mod => mod.GetType()
                              .IsSubclassOf(typeof(TemporaryModifier <T>)))
                       .Select(mod => (TemporaryModifier <T>)mod)
                       .ToList();
#elif HIGHER_BY_TYPE
            var modT = modifiers.Where(mod => { var attr = mod.GetType().GetCustomAttributes(typeof(ApplyableTo));
                                                return(attr.Count(a => ((ApplyableTo)a).What == ApplyableFor) > 0); })
                       .Where(mod => mod.GetType()
                              .IsSubclassOf(typeof(TemporaryModifier <T>)))
                       .GroupBy(e => e.GetType())
                       .Select(group => (TemporaryModifier <T>)group
                               .OrderByDescending(m => ((TemporaryModifier <T>)m).Bonus)
                               .First())
                       .ToList();
#elif LAST_BONUS
            var modT = modifiers.Where(mod => { var attr = mod.GetType().GetCustomAttributes(typeof(ApplyableTo));
                                                return(attr.Count(a => ((ApplyableTo)a).What == ApplyableFor) > 0); })
                       .Where(mod => mod.GetType()
                              .IsSubclassOf(typeof(TemporaryModifier <T>)))
                       .GroupBy(e => e.GetType())
                       .Select(group => (TemporaryModifier <T>)group.Last())
                       .ToList();
#else
            var modT = modifiers.Where(mod => {
                var attr = mod.GetType().GetCustomAttributes(typeof(ApplyableTo));
                return(attr.Count(a => ((ApplyableTo)a).What == ApplyableFor) > 0);
            })
                       .Where(mod => mod.GetType()
                              .IsSubclassOf(typeof(TemporaryModifier <T>)))
                       .Select(mod => (TemporaryModifier <T>)mod)
                       .ToList();
#endif
            T totalBonus = baseBonus;
            modT.Where(mod => mod.What == ApplyableFor).ToList()
            .ForEach(mod => totalBonus = sumMethod(totalBonus, mod.Bonus));

            return(totalBonus);
        }
Exemple #2
0
 public ApplyableTo(TemporaryModifier.ModFor modFor)
 {
     What = modFor;
 }