Esempio n. 1
0
        public void SelectPrizeCard(int amount, GameField game)
        {
            if (amount <= 0)
            {
                return;
            }

            var message = new SelectPrizeCardsMessage(amount).ToNetworkMessage(NetworkId.Generate());

            var response   = NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message);
            var cardsDrawn = new List <Card>();

            foreach (var cardId in response.Cards)
            {
                var card = game.Cards[cardId];
                PrizeCards.Remove(card);
                Hand.Add(card);
                cardsDrawn.Add(card);
            }

            game.SendEventToPlayers(new DrawCardsEvent()
            {
                Cards = new List <Card>(cardsDrawn), Player = Id
            });
        }
Esempio n. 2
0
        public void RetreatActivePokemon(PokemonCard replacementPokemon, List <EnergyCard> payedEnergy, GameField game)
        {
            var retreatStoppers = GetAllPokemonCards().SelectMany(pokemon => pokemon.TemporaryAbilities.OfType <RetreatStopper>());

            if (!ActivePokemonCard.CanReatreat(game) || retreatStoppers.Any())
            {
                return;
            }

            foreach (var energyCard in payedEnergy)
            {
                ActivePokemonCard.DiscardEnergyCard(energyCard, game);
            }

            var oldActivePokemon = ActivePokemonCard;

            ActivePokemonCard = replacementPokemon;

            ClearAbilitiesWhenBenched(oldActivePokemon);

            ActivePokemonCard.DamageStoppers = ActivePokemonCard.DamageStoppers.Where(d => !d.LastsUntilDamageTaken).ToList();
            BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon);

            oldActivePokemon.ClearStatusEffects();

            game?.SendEventToPlayers(new PokemonBecameActiveEvent
            {
                NewActivePokemonId = replacementPokemon.Id,
                ReplacedPokemonId  = oldActivePokemon.Id
            });
        }
Esempio n. 3
0
        public void SwapActivePokemon(PokemonCard pokemon, GameField game)
        {
            BenchedPokemon.ReplaceWith(pokemon, ActivePokemonCard);

            game?.SendEventToPlayers(new PokemonBecameActiveEvent
            {
                NewActivePokemonId = pokemon.Id,
                ReplacedPokemonId  = ActivePokemonCard.Id
            });

            ActivePokemonCard = pokemon;
            pokemon.RevealToAll();
        }
Esempio n. 4
0
        public void ForceRetreatActivePokemon(PokemonCard replacementPokemon, GameField game)
        {
            var oldActivePokemon = ActivePokemonCard;

            ActivePokemonCard = replacementPokemon;
            BenchedPokemon.ReplaceWith(replacementPokemon, oldActivePokemon);
            ClearAbilitiesWhenBenched(oldActivePokemon);
            oldActivePokemon.ClearStatusEffects();

            game?.SendEventToPlayers(new PokemonBecameActiveEvent
            {
                NewActivePokemonId = replacementPokemon == null ? null : replacementPokemon.Id,
                ReplacedPokemonId  = oldActivePokemon.Id
            });
        }
Esempio n. 5
0
        public void SelectActiveFromBench(GameField game)
        {
            game.GetOpponentOf(this).NetworkPlayer?.Send(new InfoMessage("Opponent is selecting a new active Pokémon").ToNetworkMessage(Id));

            var message = new SelectFromYourBenchMessage(1).ToNetworkMessage(Id);

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

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

            game?.SendEventToPlayers(new PokemonBecameActiveEvent
            {
                NewActivePokemonId = card.Id
            });

            SetActivePokemon(card);
        }