示例#1
0
文件: Affix.cs 项目: ManuelOTuga/PoE
        private Affix(IReadOnlyList <IMod> mods)
        {
            if (!mods.Any())
            {
                ValueCount     = 0;
                FirstTierStats = new IStat[0];
                _ranges        = new IReadOnlyList <Range <int> > [0];
                _trees         = new IRangeTree <int, ModWrapper> [0];
                return;
            }

            var firstMod = mods[0];

            ValueCount     = firstMod.Stats.Count;
            FirstTierStats = firstMod.Stats;
            if (mods.Any(m => m.Stats.Count != ValueCount))
            {
                throw new NotSupportedException("Mods must all have the same amount of stats");
            }

            var comparer = new ModWrapperComparer();

            _trees  = new IRangeTree <int, ModWrapper> [ValueCount];
            _ranges = new IReadOnlyList <Range <int> > [ValueCount];
            for (int i = 0; i < ValueCount; i++)
            {
                var wrapper = mods.Select(t => new ModWrapper(t, t.Stats[i].Range)).ToList();
                _trees[i]  = new RangeTree <int, ModWrapper>(wrapper, comparer);
                _ranges[i] = wrapper.Select(w => w.Range).ToList();
            }

            _allMods = mods.ToList();
        }
示例#2
0
        private Affix(IReadOnlyList <IMod> mods)
        {
            if (!mods.Any())
            {
                StatIds = new string[0];
                _ranges = new IReadOnlyList <Range <int> > [0];
                _trees  = new IRangeTree <int, ModWrapper> [0];
                return;
            }

            StatIds = mods.SelectMany(m => m.Stats).Select(s => s.Id).Distinct().ToList();
            var valueCount = StatIds.Count;

            var comparer = new ModWrapperComparer();

            _trees  = new IRangeTree <int, ModWrapper> [valueCount];
            _ranges = new IReadOnlyList <Range <int> > [valueCount];
            for (int i = 0; i < valueCount; i++)
            {
                var wrapper = mods.Select(t => new ModWrapper(t, SelectStat(t, i).Range)).ToList();
                _trees[i]  = new RangeTree <int, ModWrapper>(wrapper, comparer);
                _ranges[i] = wrapper.Select(w => w.Range).ToList();
            }

            _allMods = mods.ToList();
        }