示例#1
0
        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++;
                }
            }
        }