public SequenceItem Clone() { SequenceItem clone = (SequenceItem)MemberwiseClone(); clone.Group = new List <SequenceGroup>(Group); return(clone); }
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)); }
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; } }