public override void Update(UpdateState state) { base.Update(state); if (QueueOwner == null) { return; } //detect any changes in the interaction queue. var queue = QueueOwner.Thread.Queue; for (int i = 0; i < QueueItems.Count; i++) { int position = 0; var itemui = QueueItems[i]; bool found = false; //is this interaction still in the queue? if not then ditch it. for (int j = 0; j < queue.Count; j++) { var elem = queue[j]; if (elem == itemui.Interaction) { found = true; if (position != itemui.QueuePosition) { itemui.TweenToPosition(position); } if (elem.Cancelled && !itemui.Cancelled) { itemui.Cancelled = true; itemui.UI.SetCancelled(); } if (elem.Name != itemui.Name) { itemui.Name = elem.Name; itemui.UI.Tooltip = itemui.Name; } if (j == 0 && !itemui.Active) { itemui.Active = true; itemui.UI.SetActive(true); } break; } if (elem.Priority != VMQueuePriority.Idle) { position++; } } if (!found) { this.Remove(itemui.UI); QueueItems.RemoveAt(i--); //not here anymore } else { itemui.Update(); } } //now detect if there are any interactions we're not displaying and add them. for (int i = 0; i < queue.Count; i++) { int position = 0; var elem = queue[i]; if (elem.Priority != VMQueuePriority.Idle) { bool found = false; //is this interaction in the queue? if not, add it for (int j = 0; j < QueueItems.Count; j++) { var itemui = QueueItems[j]; if (elem == itemui.Interaction) { found = true; break; } } if (!found) //new interaction!!! { var itemui = new UIIQTrackEntry() { Interaction = elem, IconOwner = elem.Callee, SourcePos = (PieMenuClickPos.X < 0)?(new Vector2(30 + position * 50, 30)):PieMenuClickPos, TweenProgress = 0, UI = new UIInteraction(i == 0), Active = (i == 0) }; itemui.UI.OnMouseEvent += new ButtonClickDelegate(InteractionClicked); itemui.UI.ParentEntry = itemui; itemui.Name = elem.Name; itemui.UI.Tooltip = itemui.Name; itemui.TweenToPosition(position); itemui.UpdateInteractionIcon(); itemui.Update(); this.Add(itemui.UI); QueueItems.Add(itemui); PieMenuClickPos = new Vector2(-1, -1); } position++; } } }
public override void Update(UpdateState state) { base.Update(state); if (QueueOwner == null) return; //detect any changes in the interaction queue. var queue = QueueOwner.Thread.Queue; for (int i=0; i<QueueItems.Count; i++) { int position = 0; var itemui = QueueItems[i]; bool found = false; //is this interaction still in the queue? if not then ditch it. for (int j = 0; j < queue.Count; j++) { var elem = queue[j]; if (elem == itemui.Interaction) { found = true; if (position != itemui.QueuePosition) itemui.TweenToPosition(position); if (elem.Cancelled && !itemui.Cancelled) { itemui.Cancelled = true; itemui.UI.SetCancelled(); } if (elem.Name != itemui.Name) { itemui.Name = elem.Name; itemui.UI.Tooltip = itemui.Name; } if (j == 0 && !itemui.Active) { itemui.Active = true; itemui.UI.SetActive(true); } break; } if (elem.Priority != VMQueuePriority.Idle) position++; } if (!found) { this.Remove(itemui.UI); QueueItems.RemoveAt(i--); //not here anymore } else itemui.Update(); } //now detect if there are any interactions we're not displaying and add them. for (int i = 0; i < queue.Count; i++) { int position = 0; var elem = queue[i]; if (elem.Priority != VMQueuePriority.Idle) { bool found = false; //is this interaction in the queue? if not, add it for (int j = 0; j < QueueItems.Count; j++) { var itemui = QueueItems[j]; if (elem == itemui.Interaction) { found = true; break; } } if (!found) //new interaction!!! { var itemui = new UIIQTrackEntry() { Interaction = elem, IconOwner = elem.Callee, SourcePos = (PieMenuClickPos.X < 0)?(new Vector2(30 + position * 50, 30)):PieMenuClickPos, TweenProgress = 0, UI = new UIInteraction(i==0), Active = (i == 0) }; itemui.UI.OnMouseEvent += new ButtonClickDelegate(InteractionClicked); itemui.UI.ParentEntry = itemui; itemui.Name = elem.Name; itemui.UI.Tooltip = itemui.Name; itemui.TweenToPosition(position); itemui.UpdateInteractionIcon(); itemui.Update(); this.Add(itemui.UI); QueueItems.Add(itemui); PieMenuClickPos = new Vector2(-1, -1); } position++; } } }