public void AddModifier(IPoseModifier obj) { if (obj == null) { return; } if (modifierSet == null) { modifierSet = new OrderedIndexedSet <IPoseModifier>(); modifierSet.Add(obj); } else if (!modifierSet.Contains(obj)) { // insert obj with right priority order if (obj.priority > modifierSet[modifierSet.Count - 1].priority) { modifierSet.Add(obj); } else { for (int i = 0, imax = modifierSet.Count; i < imax; ++i) { if (obj.priority <= modifierSet[i].priority) { modifierSet.Insert(i, obj); break; } } } } }
public bool RemoveModifier(IPoseModifier obj) { LinkedListNode <IPoseModifier> node; if (!modifierTable.TryGetValue(obj, out node)) { return(false); } modifierTable.Remove(obj); modifiers.Remove(node); node.Value = null; modifiers.AddLast(node); return(true); }
public void AddModifier(IPoseModifier obj) { if (obj == null) { return; } if (modifierSet == null) { modifierSet = new OrderedIndexedSet <IPoseModifier>(); modifierSet.Add(obj); } else if (!modifierSet.Contains(obj)) { for (int i = modifierSet.Count - 1; i >= 0; --i) { if (modifierSet[i].priority <= obj.priority) { modifierSet.Insert(i + 1, obj); } } } }
public void AddModifier(IPoseModifier obj) { if (obj == null || modifierTable.ContainsKey(obj)) { return; } var node = modifiers.Last; if (node == null || node.Value != null) { node = modifiers.AddFirst(obj); } else { modifiers.Remove(node); node.Value = obj; modifiers.AddFirst(node); } modifierTable.Add(obj, node); // sort new modifier node var priorNode = node; while (priorNode.Next != null && priorNode.Next.Value != null && priorNode.Next.Value.priority < obj.priority) { priorNode = priorNode.Next; } if (priorNode != node) { modifiers.Remove(node); modifiers.AddAfter(priorNode, node); } }
public bool RemoveModifier(IPoseModifier obj) { return(modifierSet == null ? false : modifierSet.Remove(obj)); }