Ejemplo n.º 1
0
    //--------------------
    // managing game state
    //--------------------

    void Start()
    {
        //initialize the board to be empty
        board = new Dictionary <BoardSpaceEnum, HenchmanCard>();
        board.Add(P1, null);
        board.Add(P2, null);
        board.Add(P3, null);
        board.Add(P4, null);
        board.Add(P5, null);
        board.Add(O1, null);
        board.Add(O2, null);
        board.Add(O3, null);
        board.Add(O4, null);
        board.Add(O5, null);

        //initialize the visual spaces
        visualBoardSpaces = new Dictionary <BoardSpaceEnum, GameObject>();
        foreach (BoardSpaceHolderStruct spaceHolder in boardSpaceHolders)
        {
            visualBoardSpaces.Add(spaceHolder.space, spaceHolder.holder);
            BoardSpaceButton spaceButton = spaceHolder.holder.transform.GetChild(0).GetComponent <BoardSpaceButton>();
            spaceButton.SetupButton(this, spaceHolder.space);
        }

        //initialize the henchmenOrder (empty, like the board)
        henchmenOrder = new RemoveQueue <BoardSpaceEnum>();
    }
Ejemplo n.º 2
0
        protected override Size MeasureOverride(Size availableSize)
        {
            // Remove windows
            foreach (var dockItem in RemoveQueue)
            {
                Controller.DetachWindow(dockItem);
            }

            // Add windows
            foreach (var dockItem in AddQueue)
            {
                Controller.AttachWindow(dockItem);
            }

            // Update windows
            foreach (var dockItem in UpdateQueue)
            {
                Controller.UpdateWindow(dockItem);
            }

            Controller.ArrangeWindows();

            AddQueue.Clear();
            RemoveQueue.Clear();
            UpdateQueue.Clear();

            return(base.MeasureOverride(availableSize));
        }
Ejemplo n.º 3
0
        protected override Size ArrangeOverride(Size arrangeBounds)
        {
            if (AddQueue.Any() || RemoveQueue.Any())
            {
                InvalidateMeasure();
            }

            return(base.ArrangeOverride(arrangeBounds));
        }
Ejemplo n.º 4
0
            public new bool Remove(T item)
            {
                if (Contains(item))
                {
                    RemoveQueue.Enqueue(item);
                    return(true);
                }

                return(false);
            }
Ejemplo n.º 5
0
        protected override void OnItemRemoved(DockItem dockItem)
        {
            UpdateQueue.Remove(dockItem);

            if (AddQueue.Remove(dockItem) == false)
            {
                RemoveQueue.Add(dockItem);
            }

            dockItem.FloatingWindow?.DetachContent();

            InvalidateMeasure();
        }
Ejemplo n.º 6
0
    //this method assumes the new henchman hasn't yet been added to henchmenOrder
    private void TriggerAttentionSeekerEvents()
    {
        //invoke attention-seeker events on all henchman, in the order they came into play
        RemoveQueue <BoardSpaceEnum> newOrder = new RemoveQueue <BoardSpaceEnum>();

        while (!henchmenOrder.IsEmpty())
        {
            BoardSpaceEnum henchmanSpace = henchmenOrder.Dequeue();
            HenchmanCard   henchman      = board[henchmanSpace];
            henchman.AttentionSeekerEvent.Invoke();
            newOrder.Enqueue(henchmanSpace);
        }
        henchmenOrder = newOrder;
    }
Ejemplo n.º 7
0
        protected override void OnItemAdded(DockItem dockItem)
        {
            if (RemoveQueue.Remove(dockItem) == false)
            {
                AddQueue.Add(dockItem);
            }
            else
            {
                UpdateQueue.Add(dockItem);
            }

            dockItem.FloatingWindow?.AttachContent();

            InvalidateMeasure();
        }
Ejemplo n.º 8
0
    //NOTE: Should be called before switching the active player!
    public void HandleEndOfTurn(PlayerManager activePlayer)
    {
        //call HandleEndOfTurn() on all HenchmanCards in play, in the order they came into play
        RemoveQueue <BoardSpaceEnum> newOrder = new RemoveQueue <BoardSpaceEnum>();

        while (!henchmenOrder.IsEmpty())
        {
            BoardSpaceEnum henchmanSpace = henchmenOrder.Dequeue();
            HenchmanCard   henchman      = board[henchmanSpace];
            if (henchman.GetController() == activePlayer)
            {
                henchman.HandleEndOfTurn();
            }
            newOrder.Enqueue(henchmanSpace);
        }
        henchmenOrder = newOrder;
    }
Ejemplo n.º 9
0
    //---------------------
    // responding to events
    //---------------------

    private void TriggerVengeanceEvents(PlayerManager prizeCardRecipient)
    {
        //invoke vengeance events on relevant henchman, in the order they came into play
        RemoveQueue <BoardSpaceEnum> newOrder = new RemoveQueue <BoardSpaceEnum>();

        while (!henchmenOrder.IsEmpty())
        {
            BoardSpaceEnum henchmanSpace = henchmenOrder.Dequeue();
            HenchmanCard   henchman      = board[henchmanSpace];
            if (henchman.GetController() != prizeCardRecipient)
            {
                //only invoke the event if the recipient of the prize card was not the henchman's controller
                henchman.VengeanceEvent.Invoke();
            }
            newOrder.Enqueue(henchmanSpace);
        }
        henchmenOrder = newOrder;
    }
Ejemplo n.º 10
0
        public void Do()
        {
            OctreeAdd    tmp;
            OctreeRemove remove;

            while (true)
            {
                System.Console.WriteLine("working it.");
                while (AddQueue.Count > 0)
                {
                    tmp = AddQueue.Dequeue();
                    if (tmp == null)
                    {
                        continue;
                    }
                    if (tmp.x >= Size.X || tmp.y >= Size.Y || tmp.z >= Size.Z || tmp.x < 0 || tmp.y < 0 || tmp.z < 0)
                    {
                        continue;
                    }
                    if (root == null)
                    {
                        this.root = new OctreeNode((int)Math.Max(Size.X, Math.Max(Size.Y, Size.Z)), 0, 0, 0, ref tmp.color);
                    }

                    root.Add(tmp.x, tmp.y, tmp.z, tmp.size, ref tmp.color);
                }


                while (RemoveQueue.Count > 0)
                {
                    remove = RemoveQueue.Dequeue();
                    if (root == null)
                    {
                        continue;
                    }
                    root.Remove(remove.x, remove.y, remove.z);
                    UpdateNeighbors(remove.x, remove.y, remove.z);
                }

                faceBatch.Update();
            }
        }
Ejemplo n.º 11
0
            public void Process()
            {
                if (ToBeCleared)
                {
                    Clear();
                    AddQueue.Clear();
                    RemoveQueue.Clear();
                    return;
                }

                while (AddQueue.Count > 0)
                {
                    ProcessAdd(AddQueue.Dequeue());
                }
                while (RemoveQueue.Count > 0)
                {
                    base.Remove(RemoveQueue.Dequeue());
                }

                return;
            }
Ejemplo n.º 12
0
 public void Remove(int x, int y, int z)
 {
     RemoveQueue.Enqueue(new OctreeRemove(x, y, z));
 }
Ejemplo n.º 13
0
        protected override void OnTemplateContractDetaching()
        {
            RemoveQueue.AddRange(Items.Except(AddQueue));

            base.OnTemplateContractDetaching();
        }
Ejemplo n.º 14
0
 public new void RemoveAt(int index)
 {
     RemoveQueue.Enqueue(this[index]);
 }