protected override void Activate(Player owner, Player opponent, int damageTaken, GameField game)
        {
            IEnumerable <Card> energyCards;
            Player             activator = GetActivator(game.ActivePlayer);

            if (energyType != EnergyTypes.All)
            {
                energyCards = activator.Hand.OfType <EnergyCard>().Where(card => energyType == card.EnergyType);
            }
            else
            {
                energyCards = activator.Hand.OfType <EnergyCard>();
            }

            var message  = new PickFromListMessage(energyCards.ToList(), 1).ToNetworkMessage(owner.Id);
            var response = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message);

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

            var selectPokemonMessage = new SelectFromYourPokemonMessage(energyType).ToNetworkMessage(owner.Id);

            response = owner.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(selectPokemonMessage);
            var selectedId = response.Cards.First();

            var pokemon = owner.ActivePokemonCard.Id.Equals(selectedId) ? owner.ActivePokemonCard : owner.BenchedPokemon.ValidPokemonCards.First(x => x.Id.Equals(selectedId));

            pokemon.AttachEnergy((EnergyCard)energyCard, game);
        }
示例#2
0
        public static PokemonCard AskForTargetFromTargetingMode(TargetingMode targetingMode, GameField game, Player caster, Player opponent, PokemonCard pokemonOwner, string info = "", string nameFilter = "")
        {
            PokemonCard    target;
            NetworkMessage message;
            NetworkId      selectedId;
            IDeckFilter    filter = !string.IsNullOrEmpty(nameFilter) ? new PokemonWithNameOrTypeFilter(nameFilter, EnergyTypes.All) : null;

            switch (targetingMode)
            {
            case TargetingMode.Self:
                target = pokemonOwner;
                break;

            case TargetingMode.YourActive:
                target = caster.ActivePokemonCard;
                break;

            case TargetingMode.YourBench:
                if (caster.BenchedPokemon.Count == 0)
                {
                    return(null);
                }
                else if (caster.BenchedPokemon.Count == 1)
                {
                    return(caster.BenchedPokemon.GetFirst());
                }
                message = new SelectFromYourBenchMessage(1)
                {
                    Info = info, Filter = filter
                }.ToNetworkMessage(game.Id);
                selectedId = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards.First();
                target     = (PokemonCard)game.Cards[selectedId];
                break;

            case TargetingMode.YourPokemon:
                message = new SelectFromYourPokemonMessage()
                {
                    Info = info, Filter = filter
                }.ToNetworkMessage(game.Id);
                selectedId = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards.First();
                target     = (PokemonCard)game.Cards[selectedId];
                break;

            case TargetingMode.OpponentActive:
                target = opponent.ActivePokemonCard;
                break;

            case TargetingMode.OpponentBench:
                if (opponent.BenchedPokemon.Count == 0)
                {
                    return(null);
                }
                else if (opponent.BenchedPokemon.Count == 1)
                {
                    return(opponent.BenchedPokemon.GetFirst());
                }

                message = new SelectFromOpponentBenchMessage(1)
                {
                    Info = info, Filter = filter
                }.ToNetworkMessage(game.Id);
                selectedId = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards.First();
                target     = (PokemonCard)game.Cards[selectedId];
                break;

            case TargetingMode.OpponentPokemon:
                message = new SelectOpponentPokemonMessage(1)
                {
                    Info = info, Filter = filter
                }.ToNetworkMessage(game.Id);
                selectedId = caster.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards.First();
                target     = (PokemonCard)game.Cards[selectedId];
                break;

            case TargetingMode.LastEffectTarget:
                target = game.LastTarget;
                break;

            case TargetingMode.AnyPokemon:
                throw new NotImplementedException("TargetingMode.AnyPokemon not implemented in Targeting");

            default:
                target = caster.ActivePokemonCard;
                break;
            }

            if (game != null)
            {
                game.LastTarget = target;
            }

            return(target);
        }
示例#3
0
        public void SelectFromYourPokemonMessage()
        {
            var message = new SelectFromYourPokemonMessage("asd", EnergyTypes.Darkness);

            Assert.NotNull(SerializeAndBack(message));
        }