protected override void OnPlayVirtually(Card card, Card extraCard)
        {
            Player owner = card.Owner;
            Player current = owner;
            Game.GameTable.PlayerPlayCard(card, this.Type);
            Game.GameTable.PlayerDiscardCard(extraCard);

            if(!includeSelf)
                current = Game.NextPlayer(current);

            List<ResponseHandler> handlers = new List<ResponseHandler>();
            do
            {
                if(current == owner || current.HasCardEffect(this))
                {
                    ResponseHandler h = OnPlay(owner, current);
                    if(h != null)
                        handlers.Add(h);
                }
                current = Game.NextPlayer(current);
            }
            while(current != owner);
            if(handlers.Count != 0)
                Game.GameCycle.PushTempHandler(new QueueResponseHandler(handlers));
        }
Exemple #2
0
        protected override void OnRespondCard(Card card)
        {
            if(card.Owner != RequestedPlayer)
                throw new BadCardException();

            card.AssertInHand();

            Game.GameTable.PlayerDiscardCard(card);

            if(RequestedPlayer.Hand.Count <= RequestedPlayer.MaxCardCount)
                End();
        }
        protected override void OnRespondCard(Card card)
        {
            if(card.Owner != RequestedPlayer)
                throw new BadCardException();

            if(barrelsChecked.Contains(card))
                throw new BadCardException();

            canEndImmediately = false;
            RequestedPlayer.CheckMissed(card, OnResult);
            canEndImmediately = true;
            if(power == 0)
                End();
        }
Exemple #4
0
 protected override void OnPlayVirtually(Card card)
 {
     PlayFromTableVirtually(card);
 }
Exemple #5
0
 private bool RemoveCardFromSelection(Card card)
 {
     return selection.Remove(card);
 }
Exemple #6
0
 private void PutCardToDeck(Card card)
 {
     card.Owner = null;
     deck.Push(card);
 }
Exemple #7
0
 public void UndrawFromSelection(Card card)
 {
     if(!selection.Remove(card))
         throw new InvalidOperationException();
     PutCardToDeck(card);
     game.Session.EventManager.OnUndrawnFromSelection(card, selectionOwner);
 }
Exemple #8
0
        public void PlayerStealCard(Player player, Card card, bool revealCard)
        {
            Player owner = card.Owner;
            if(owner == null)
                throw new InvalidOperationException();
            if(!owner.RemoveCardFromHand(card))
                if(!owner.RemoveCardFromTable(card as TableCard))
                    throw new InvalidOperationException();

            player.AddCardToHand(card);
            game.Session.EventManager.OnPlayerStoleCard(player, owner, card, revealCard);
            owner.CheckEmptyHand();
        }
Exemple #9
0
        public void PlayerPlayCard(Card card, Player targetPlayer)
        {
            Player owner = card.Owner;
            if(owner == null)
                throw new InvalidOperationException();

            if(!owner.RemoveCardFromHand(card))
                if(!owner.RemoveCardFromTable(card as TableCard))
                    throw new InvalidOperationException();
            PutCardToGraveyard(card);

            game.Session.EventManager.OnPlayerPlayedCard(owner, card, targetPlayer);
            owner.OnPlayedCard(card);
            owner.CheckEmptyHand();
        }
Exemple #10
0
 public void PlayerPickFromSelection(Player player, Card card, bool revealCard)
 {
     if(selectionOwner != null && selectionOwner != player)
         throw new InvalidOperationException();
     if(!selection.Remove(card))
         throw new InvalidOperationException();
     player.AddCardToHand(card);
     game.Session.EventManager.OnPlayerPickedFromSelection(player, card, selectionOwner == null || revealCard);
 }
Exemple #11
0
 public virtual void CheckDeck(Card causedBy, CheckDeckCallback checkCallback, CardResultCallback resultCallback)
 {
     Card checkedCard = player.Game.GameTable.CheckDeck();
     bool result = checkCallback(checkedCard);
     Game.Session.EventManager.OnPlayerCheckedDeck(player, checkedCard, causedBy, result);
     resultCallback(causedBy, result);
 }
        private void OnResult(Card card, bool result)
        {
            if(card != null)
                if(card.Type == CardType.Barrel)
                    barrelsChecked.Add(card);
            if(result)
            {
                if(card != null && card.Type != CardType.Barrel)
                    if(card.Type != CardType.Missed)
                        Game.GameTable.PlayerRespondWithCard(card, CardType.Missed);
                    else
                        Game.GameTable.PlayerRespondWithCard(card);

                if(card != null && CausedBy != null && !CausedBy.HasCardEffect(card))
                    return;
                if(--power == 0)
                {
                    if(canEndImmediately)
                        End();
                }
                else
                {
                    barrelsChecked.Clear();
                    abilityUsed = false;
                }
            }
        }
Exemple #13
0
 public EmptyCard(Card parent)
 {
     this.id = parent.id;
 }
Exemple #14
0
 public virtual void PlayVirtually(Card card)
 {
     throw new BadUsageException();
 }
Exemple #15
0
 protected virtual void PlayFromTableVirtually(Card card)
 {
     throw new BadUsageException();
 }
Exemple #16
0
 public virtual void PlayCard(Card card)
 {
     card.Play();
 }
Exemple #17
0
        public void PlayerCancelCard(Player player, Card card)
        {
            Player owner = card.Owner;
            if(owner == null)
                throw new InvalidOperationException();
            if(!owner.RemoveCardFromHand(card))
                if(!owner.RemoveCardFromTable(card as TableCard))
                    throw new InvalidOperationException();

            PutCardToGraveyard(card);
            game.Session.EventManager.OnPlayerCancelledCard(player, owner, card);
            owner.CheckEmptyHand();
        }
Exemple #18
0
 public virtual bool HasCardEffect(Card card)
 {
     return true;
 }
Exemple #19
0
 public void PlayerPickFromSelection(Player player, Card card)
 {
     PlayerPickFromSelection(player, card, false);
 }
Exemple #20
0
 public virtual bool IsBang(Card card)
 {
     return card.Type == CardType.Bang;
 }
Exemple #21
0
        public void PlayerRespondWithCard(Card card, CardType asCard)
        {
            Player owner = card.Owner;
            if(owner == null)
                throw new InvalidOperationException();

            if(!owner.RemoveCardFromHand(card))
                if(!owner.RemoveCardFromTable(card as TableCard))
                    throw new InvalidOperationException();
            PutCardToGraveyard(card);

            game.Session.EventManager.OnPlayerRespondedWithCard(owner, card, asCard);
            owner.OnRespondedWithCard(card);
            owner.CheckEmptyHand();
        }
Exemple #22
0
 public virtual bool IsMissed(Card card)
 {
     return card.Type == CardType.Missed;
 }
Exemple #23
0
 public void PlayerStealCard(Player player, Card card)
 {
     PlayerStealCard(player, card, false);
 }
Exemple #24
0
 public virtual void OnDrewFirstCard(Card card)
 {
 }
Exemple #25
0
 private void AddCardToSelection(Card card)
 {
     selection.Add(card);
 }
Exemple #26
0
 public virtual void OnDrewSecondCard(Card card)
 {
 }
Exemple #27
0
 private void PutCardToGraveyard(Card card)
 {
     card.Owner = null;
     graveyard.Push(card);
 }
Exemple #28
0
 public virtual void OnPlayedCard(Card card)
 {
 }
Exemple #29
0
        public void CancelCard(Card card)
        {
            Player owner = card.Owner;
            if(owner == null)
            {
                if(!selection.Remove(card))
                    throw new InvalidOperationException();
            }
            else if(!owner.RemoveCardFromHand(card))
                if(!owner.RemoveCardFromTable(card as TableCard))
                    throw new InvalidOperationException();

            PutCardToGraveyard(card);
            game.Session.EventManager.OnCardCancelled(card);
            if(owner != null)
                owner.CheckEmptyHand();
        }
Exemple #30
0
 public virtual void OnRespondedWithCard(Card card)
 {
 }