コード例 #1
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var filters       = CardUtil.GetCardFilters(CardType);
            var searchMessage = new DeckSearchMessage(opponent.Hand, filters, Amount);
            var response      = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(searchMessage.ToNetworkMessage(game.Id));

            foreach (var id in response.Cards)
            {
                var card = game.Cards[id];

                if (shuffleIntoDeck)
                {
                    opponent.Hand.Remove(card);
                    opponent.Deck.ShuffleInCard(card);

                    game.SendEventToPlayers(new CardsDiscardedEvent()
                    {
                        Cards = new List <Card> {
                            card
                        }, Player = opponent.Id
                    });
                }
                else
                {
                    opponent.DiscardCard(card);
                }
            }
        }
コード例 #2
0
        protected override void Activate(Player owner, Player opponent, int damageTaken, GameField game)
        {
            var message = new DeckSearchMessage(owner.Deck.Cards.ToList(), new List <IDeckFilter> {
                new EvolutionPokemonFilter()
            }, amount).ToNetworkMessage(owner.Id);
            var response = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message);

            owner.DrawCardsFromDeck(response.Cards);
        }
コード例 #3
0
        public static List <Card> SearchDeck(GameField game, Player player, List <IDeckFilter> filters, int amount)
        {
            game?.GetOpponentOf(player)?.NetworkPlayer?.Send(new InfoMessage("Opponent is searching their deck...").ToNetworkMessage(game.Id));
            var message = new DeckSearchMessage(player.Deck.Cards.ToList(), filters, amount).ToNetworkMessage(game.Id);

            var response = player.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards;

            return(response.Select(x => game.Cards[x]).ToList());
        }
コード例 #4
0
        public static List <NetworkId> TriggerDeckSearch(this IDeckSearcher deckSearcher, Player owner)
        {
            var message  = new DeckSearchMessage(owner.Deck.Cards.ToList(), deckSearcher.GetDeckFilters(), deckSearcher.GetNumberOfCards());
            var response = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(owner.Id));

            if (response.Cards.Count != deckSearcher.GetNumberOfCards())
            {
                throw new Exception("Cheating!?");
            }

            owner.Deck.Shuffle();
            return(response.Cards);
        }
コード例 #5
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var choices = caster.Deck.Cards.Take(AmountToPickFrom).ToList();

            var message  = new DeckSearchMessage(choices, CardUtil.GetCardFilters(CardType, EnergyType), AmountToPick);
            var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id));
            var cards    = new HashSet <Card>(response.Cards.Select(id => game.Cards[id]));

            var discardedCards = new List <Card>();
            var cardsDrawn     = new List <Card>();

            foreach (var card in choices)
            {
                if (cards.Contains(card))
                {
                    if (revealPickedCards)
                    {
                        card.RevealToAll();
                    }
                    cardsDrawn.Add(card);
                }
                else if (ShuffleBack)
                {
                    caster.Deck.Cards.Push(card);
                }
                else
                {
                    card.RevealToAll();
                    discardedCards.Add(card);
                }
            }

            if (shuffleBack)
            {
                caster.Deck.Shuffle();
            }

            caster.DrawCardsFromDeck(cardsDrawn);
            caster.DiscardPile.AddRange(discardedCards);

            game.SendEventToPlayers(new CardsDiscardedEvent()
            {
                Cards = discardedCards, Player = caster.Id
            });
        }
コード例 #6
0
        public void Init(DeckSearchMessage deckSearchMessage)
        {
            ClearOldCards();
            selectedCards.Clear();
            onlyView       = false;
            availableCards = new HashSet <NetworkId>();
            limit          = deckSearchMessage.CardCount;
            minCount       = 0;

            foreach (var card in deckSearchMessage.Cards)
            {
                card.RevealToAll();

                if (deckSearchMessage.Filters.All(filter => filter.IsCardValid(card)))
                {
                    var spawnedCard = Instantiate(previewCard, contentObject.transform);
                    spawnedCard.GetComponent <CardRenderer>().SetCard(card, false, true);
                    availableCards.Add(card.Id);
                }
            }

            foreach (var card in deckSearchMessage.Cards)
            {
                if (!deckSearchMessage.Filters.All(filter => filter.IsCardValid(card)))
                {
                    var spawnedCard  = Instantiate(previewCard, contentObject.transform);
                    var cardRenderer = spawnedCard.GetComponent <CardRenderer>();
                    cardRenderer.FadeOut();
                    cardRenderer.SetCard(card, false, true);
                }
            }

            if (availableCards.Count == 0)
            {
                limit    = 0;
                minCount = 0;
            }
        }
コード例 #7
0
        public void DeckSearchMessage()
        {
            var message = new DeckSearchMessage(new List <Card>(), new List <IDeckFilter>(), 1);

            Assert.NotNull(SerializeAndBack(message));
        }