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); }
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); }
public void SelectFromYourPokemonMessage() { var message = new SelectFromYourPokemonMessage("asd", EnergyTypes.Darkness); Assert.NotNull(SerializeAndBack(message)); }