internal CardCollection Retrieve(Player player, Predicate <Card> match, int count) { CardCollection matching = _Cards.FindAll(match); if (count >= 0 && count < matching.Count) { matching.RemoveRange(count, matching.Count - count); if (matching.Count != count) { throw new Exception("Incorrect number of cards drawn!"); } } _Cards.RemoveAll(c => matching.Contains(c)); if (matching.Count > 0) { if (_AsynchronousChanging) { if (_AsynchronousPileChangedEventArgs == null) { _AsynchronousPileChangedEventArgs = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Removed, matching); } else { _AsynchronousPileChangedEventArgs.AddedCards.AddRange(matching); } } else if (PileChanged != null) { PileChangedEventArgs pcea = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Removed, matching); PileChanged(this, pcea); } } return(matching); }
public virtual void EndChanges() { _AsynchronousChanging = false; if (_AsynchronousPileChangedEventArgs != null && PileChanged != null) { PileChanged(this, _AsynchronousPileChangedEventArgs); } _AsynchronousPileChangedEventArgs = null; }
public IEnumerable <Card> Take(Type cardType, int count) { IEnumerable <Card> returnCards = _Cards.FindAll(card => card.CardType == cardType).Take(count); if (count == 0) { return(returnCards); } if (returnCards.Count() == 0) { throw new Exception("Nothing to take!"); } if (_Game.State != GameState.Setup) { for (int index = _Tokens.Count - 1; index >= 0; index--) { Token token = _Tokens[index]; if (token.Gaining()) { _Tokens.Remove(token); _Game.Table.TokenPiles.Add(token); if (TokensChanged != null) { TokensChangedEventArgs etcea = new TokensChangedEventArgs(token); TokensChanged(this, etcea); } } } } _Cards.RemoveAll(c => returnCards.Contains(c)); if (_Game.State != GameState.Setup) { if (_AsynchronousChanging) { if (_AsynchronousPileChangedEventArgs == null) { _AsynchronousPileChangedEventArgs = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Removed, returnCards); } else { _AsynchronousPileChangedEventArgs.RemovedCards.AddRange(returnCards); } } else if (PileChanged != null) { PileChangedEventArgs pcea = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Removed, returnCards); PileChanged(this, pcea); } } return(returnCards); }
public virtual void Reset() { PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset); if (_AsynchronousChanging) { _AsynchronousPileChangedEventArgs = pcea; } else if (PileChanged != null) { PileChanged(this, pcea); } }
public void Refresh(Player player) { PileChangedEventArgs pcea = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Reset); if (_AsynchronousChanging) { _AsynchronousPileChangedEventArgs = pcea; } else if (PileChanged != null) { PileChanged(this, pcea); } }
internal void AddTo(Card card) { if (card.Category == Cards.Category.Unknown) { throw new Exception("Cannot add card of a different type to Supply pile"); } _Cards.Insert(0, card); card.AddedToSupply(this._Game, this); if (PileChanged != null) { lock (PileChanged) { PileChangedEventArgs pcea = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Added, new CardCollection() { card }); PileChanged(this, pcea); } } }
public void AddToken(Token token) { _Tokens.Add(token); if (TokensChanged != null) { TokensChangedEventArgs etcea = new TokensChangedEventArgs(token); TokensChanged(this, etcea); } PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset); if (_AsynchronousChanging) { _AsynchronousPileChangedEventArgs = pcea; } else if (PileChanged != null) { PileChanged(this, pcea); } }
internal void AddRange(Cards.CardCollection cards) { _Cards.InsertRange(0, cards); this.Sort(); if (_AsynchronousChanging) { if (_AsynchronousPileChangedEventArgs == null) { _AsynchronousPileChangedEventArgs = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Added, cards); } else { _AsynchronousPileChangedEventArgs.AddedCards.AddRange(cards); } } else if (PileChanged != null) { PileChangedEventArgs pcea = new PileChangedEventArgs(null, PileChangedEventArgs.Operation.Added, cards); PileChanged(this, pcea); } }
public void AddRange(Player player, IEnumerable <Card> cardCollection, DeckPosition deckPosition) { switch (deckPosition) { case DeckPosition.Top: _Cards.InsertRange(0, cardCollection.Reverse()); break; case DeckPosition.Bottom: _Cards.AddRange(cardCollection); break; } this.Sort(); if (cardCollection.Count() > 0) { if (_AsynchronousChanging) { if (_AsynchronousPileChangedEventArgs == null) { _AsynchronousPileChangedEventArgs = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Added, cardCollection); } else { _AsynchronousPileChangedEventArgs.AddedCards.AddRange(cardCollection); } } else if (PileChanged != null) { lock (PileChanged) { PileChangedEventArgs pcea = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Added, cardCollection); PileChanged(this, pcea); } } } }
public override void Reset() { base.Reset(); if (_Tokens.RemoveAll(token => token.IsTemporary) > 0) { if (TokensChanged != null) { TokensChangedEventArgs tcea = new TokensChangedEventArgs(null); TokensChanged(this, tcea); } } PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset); if (_AsynchronousChanging) { _AsynchronousPileChangedEventArgs = pcea; } else if (PileChanged != null) { PileChanged(this, pcea); } }
public virtual void BeginChanges() { _AsynchronousChanging = true; _AsynchronousPileChangedEventArgs = null; }