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); } } }
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); }
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()); }
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); }
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 }); }
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; } }
public void DeckSearchMessage() { var message = new DeckSearchMessage(new List <Card>(), new List <IDeckFilter>(), 1); Assert.NotNull(SerializeAndBack(message)); }