Exemple #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;
            bool skipParentIdle;

            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.
                skipParentIdle = false;
                for (int j = 0; j < queue.Count; j++)
                {
                    var elem     = queue[j];
                    var priority = GetElemPriority(elem, j);
                    if (elem == itemui.Interaction)
                    {
                        found = true;
                        if (position != itemui.QueuePosition)
                        {
                            itemui.TweenToPosition(position);
                        }
                        if (elem.NotifyIdle && priority <= 0 && !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);
                        }

                        if (itemui.IconOwner != elem.IconOwner)
                        {
                            itemui.IconOwner = elem.IconOwner;
                            itemui.UpdateInteractionIcon();
                        }

                        if (itemui.InteractionResult != elem.InteractionResult)
                        {
                            itemui.InteractionResult = elem.InteractionResult;
                            itemui.UpdateInteractionResult();
                        }
                        break;
                    }
                    if ((elem.Mode != VMQueueMode.Idle && (j == 0 || elem.Mode != VMQueueMode.ParentExit) && (!skipParentIdle || elem.Mode != VMQueueMode.ParentIdle)) || DebugMode)
                    {
                        position++;
                    }
                    if (elem.Mode == VMQueueMode.ParentIdle)
                    {
                        skipParentIdle = true;
                    }
                }
                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.

            skipParentIdle = false;
            for (int i = 0; i < queue.Count; i++)
            {
                int position = 0;
                var elem     = queue[i];

                if ((elem.Mode != VMQueueMode.Idle && (i == 0 || elem.Mode != VMQueueMode.ParentExit) && (!skipParentIdle || elem.Mode != VMQueueMode.ParentIdle)) || DebugMode)
                {
                    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.IconOwner,
                            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.OnInteractionResult += InteractionResult;
                        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++;
                }
                if (elem.Mode == VMQueueMode.ParentIdle)
                {
                    skipParentIdle = true;
                }
            }
        }
Exemple #2
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);
                        }

                        if (itemui.IconOwner != elem.IconOwner)
                        {
                            itemui.IconOwner = elem.IconOwner;
                            itemui.UpdateInteractionIcon();
                        }
                        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.IconOwner,
                            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++;
                }
            }
        }