Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public virtual void EndChanges()
 {
     _AsynchronousChanging = false;
     if (_AsynchronousPileChangedEventArgs != null && PileChanged != null)
     {
         PileChanged(this, _AsynchronousPileChangedEventArgs);
     }
     _AsynchronousPileChangedEventArgs = null;
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        public virtual void Reset()
        {
            PileChangedEventArgs pcea = new PileChangedEventArgs(PileChangedEventArgs.Operation.Reset);

            if (_AsynchronousChanging)
            {
                _AsynchronousPileChangedEventArgs = pcea;
            }
            else if (PileChanged != null)
            {
                PileChanged(this, pcea);
            }
        }
Exemplo n.º 5
0
        public void Refresh(Player player)
        {
            PileChangedEventArgs pcea = new PileChangedEventArgs(player, PileChangedEventArgs.Operation.Reset);

            if (_AsynchronousChanging)
            {
                _AsynchronousPileChangedEventArgs = pcea;
            }
            else if (PileChanged != null)
            {
                PileChanged(this, pcea);
            }
        }
Exemplo n.º 6
0
 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);
         }
     }
 }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 9
0
        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);
                    }
                }
            }
        }
Exemplo n.º 10
0
        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);
            }
        }
Exemplo n.º 11
0
 public virtual void BeginChanges()
 {
     _AsynchronousChanging             = true;
     _AsynchronousPileChangedEventArgs = null;
 }