//-------------------- // 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>(); }
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)); }
protected override Size ArrangeOverride(Size arrangeBounds) { if (AddQueue.Any() || RemoveQueue.Any()) { InvalidateMeasure(); } return(base.ArrangeOverride(arrangeBounds)); }
public new bool Remove(T item) { if (Contains(item)) { RemoveQueue.Enqueue(item); return(true); } return(false); }
protected override void OnItemRemoved(DockItem dockItem) { UpdateQueue.Remove(dockItem); if (AddQueue.Remove(dockItem) == false) { RemoveQueue.Add(dockItem); } dockItem.FloatingWindow?.DetachContent(); InvalidateMeasure(); }
//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; }
protected override void OnItemAdded(DockItem dockItem) { if (RemoveQueue.Remove(dockItem) == false) { AddQueue.Add(dockItem); } else { UpdateQueue.Add(dockItem); } dockItem.FloatingWindow?.AttachContent(); InvalidateMeasure(); }
//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; }
//--------------------- // 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; }
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(); } }
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; }
public void Remove(int x, int y, int z) { RemoveQueue.Enqueue(new OctreeRemove(x, y, z)); }
protected override void OnTemplateContractDetaching() { RemoveQueue.AddRange(Items.Except(AddQueue)); base.OnTemplateContractDetaching(); }
public new void RemoveAt(int index) { RemoveQueue.Enqueue(this[index]); }