コード例 #1
0
        public SequenceItem Clone()
        {
            SequenceItem clone = (SequenceItem)MemberwiseClone();

            clone.Group = new List <SequenceGroup>(Group);
            return(clone);
        }
コード例 #2
0
        private int Compare(SequenceItem x, SequenceItem y, List <SequenceGroup> tail, double minMps, double maxMps)
        {
            bool xsingletail = x.Tail.Count > 0;
            bool ysingletail = y.Tail.Count > 0;
            int  compare     = ysingletail.CompareTo(xsingletail);

            if (compare != 0)
            {
                return(compare);
            }
            int xintersect = (tail == null) ? 0 : Rawr.Mage.ListUtils.Intersect <SequenceGroup>(x.Group, tail).Count;
            int yintersect = (tail == null) ? 0 : Rawr.Mage.ListUtils.Intersect <SequenceGroup>(y.Group, tail).Count;

            compare = yintersect.CompareTo(xintersect);
            if (compare != 0)
            {
                return(compare);
            }
            return(Sequence.CompareMps(x.Mps, y.Mps, minMps, maxMps));
        }
コード例 #3
0
        public void SortByMps(double minMps, double maxMps)
        {
            List <SequenceItem> Item2  = new List <SequenceItem>(Item);
            List <SequenceItem> sorted = new List <SequenceItem>();

            while (Item2.Count > 0)
            {
                foreach (SequenceItem item in Item2)
                {
                    item.Tail = new List <SequenceGroup>(item.Group);
                }

                foreach (SequenceItem item in Item2)
                {
                    foreach (SequenceItem tailitem in Item2)
                    {
                        List <SequenceGroup> intersect = Rawr.Mage.ListUtils.Intersect <SequenceGroup>(item.Group, tailitem.Group);
                        if (intersect.Count > 0)
                        {
                            item.Tail = Rawr.Mage.ListUtils.Intersect <SequenceGroup>(intersect, item.Tail);
                        }
                    }
                }

                SequenceItem best = null;
                foreach (SequenceItem item in Item2)
                {
                    if (best == null || Compare(item, best, (sorted.Count > 0) ? sorted[sorted.Count - 1].Group : null, minMps, maxMps) < 0)
                    {
                        best = item;
                    }
                }
                Item2.Remove(best);
                sorted.Add(best);
            }
            //Item = sorted;
            for (int i = 0; i < sorted.Count; i++)
            {
                sorted[i].SuperIndex = i;
            }
        }