Example #1
0
        public static void DiscardCardsFromHand(Player player, GameField game, DiscardCardSettings discardSettings)
        {
            var message = new DiscardCardsMessage
            {
                MinCount = discardSettings.MinAmount,
                Count    = discardSettings.MaxAmount,
                Filters  = discardSettings.Filters.ToList(),
            };

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

            if (discardSettings.ShuffleIntoDeck)
            {
                var cardsToDiscard = response.Cards.Select(id => player.Hand.First(x => x.Id.Equals(id))).ToList();
                player.Deck.ShuffleInCards(cardsToDiscard);
                game.LastDiscard = cardsToDiscard.Count;

                foreach (var card in cardsToDiscard)
                {
                    player.Hand.Remove(card);
                }

                player.TriggerDiscardEvent(cardsToDiscard);
            }
            else
            {
                game.LastDiscard = response.Cards.Count;
                foreach (var id in response.Cards)
                {
                    var card = player.Hand.First(x => x.Id.Equals(id));
                    player.DiscardCard(card);
                }
            }
        }
Example #2
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var target = opponents ? opponent : caster;

            if (amount == -1)
            {
                game.SendEventToPlayers(new CardsDiscardedEvent()
                {
                    Cards  = new List <Card>(target.Hand),
                    Player = target.Id
                });

                var cards = CardUtil.GetCardsOfType(target.Hand, CardType).ToList();
                target.Deck.ShuffleInCards(cards);

                foreach (var card in cards)
                {
                    target.Hand.Remove(card);
                }

                game.SendEventToPlayers(new CardsDiscardedEvent()
                {
                    Cards  = new List <Card>(cards),
                    Player = target.Id
                });
            }
            else
            {
                var message = new DiscardCardsMessage(Amount, CardUtil.GetCardFilters(CardType));
                var choices = target.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id)).Cards;

                var cards = choices.Select(id => game.Cards[id]).ToList();

                foreach (var card in cards)
                {
                    target.Hand.Remove(card);
                }

                target.Deck.ShuffleInCards(cards);

                game.SendEventToPlayers(new CardsDiscardedEvent()
                {
                    Cards  = new List <Card>(cards),
                    Player = target.Id
                });
            }
        }
Example #3
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var discardMessage = new DiscardCardsMessage(1, new List <IDeckFilter> {
                new Stage2Filter()
            })
            {
                Info = "Select a stage 2 Pokémon from your hand"
            };

            var responseStage2   = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(discardMessage.ToNetworkMessage(game.Id));
            var evolutionCard    = (PokemonCard)game.Cards[responseStage2.Cards.First()];
            var basicVersionName = PokemonNames.GetBasicVersionOf(evolutionCard.PokemonName);

            var availableCards = new List <PokemonCard>();

            foreach (var pokemon in caster.GetAllPokemonCards().Where(p => p.PokemonName == basicVersionName && p.CanEvolve()))
            {
                availableCards.Add(pokemon);
            }

            if (availableCards.Count == 1)
            {
                game.EvolvePokemon(availableCards[0], evolutionCard, true);

                return;
            }

            var pickTargetResponse = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(new SelectFromYourPokemonMessage()
            {
                Info   = $"Select a {basicVersionName} Pokémon to evolve",
                Filter = new PokemonWithNameAndOwner()
                {
                    Owner = caster.Id, Names = availableCards.Select(x => x.PokemonName).Distinct().ToList()
                }
            }.ToNetworkMessage(game.Id));

            var selectedCard = (PokemonCard)game.Cards[pickTargetResponse.Cards.First()];

            game.EvolvePokemon(selectedCard, evolutionCard, true);
        }
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            caster.ForceRetreatActivePokemon(null, game);

            var message = new DiscardCardsMessage(1, new List <IDeckFilter>()
            {
                new BasicPokemonFilter()
            })
            {
                Info = "Select a new Active Pokémon from your hand"
            };
            var response = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message.ToNetworkMessage(game.Id));

            var pokemon = (PokemonCard)game.Cards[response.Cards[0]];

            caster.SetActivePokemon(pokemon);

            game.SendEventToPlayers(new PokemonBecameActiveEvent()
            {
                NewActivePokemon = pokemon
            });
        }
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            var filters = CardUtil.GetCardFilters(CardType.Energy, EnergyType);

            var energyTypeText = EnergyType == EnergyTypes.All ? "Energy" : Enum.GetName(typeof(EnergyTypes), EnergyType) + "Energy";
            var message        = new DiscardCardsMessage(Amount, filters)
            {
                MinCount = 0,
                Info     = $"Pick up to 2 {energyTypeText} from your hand"
            }.ToNetworkMessage(game.Id);

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

            if (!response.Cards.Any())
            {
                return;
            }

            var energyCard = game.Cards[response.Cards.First()];

            var pokemon = Targeting.AskForTargetFromTargetingMode(TargetingMode, game, caster, opponent, pokemonSource);

            pokemon.AttachEnergy((EnergyCard)energyCard, game);
        }
Example #6
0
        public void DiscardCardsMessage()
        {
            var message = new DiscardCardsMessage(2);

            Assert.NotNull(SerializeAndBack(message));
        }