コード例 #1
0
ファイル: Player.cs プロジェクト: Spongie/PokemonTcg
        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);
        }
コード例 #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 SelectFromYourBenchMessage()
        {
            var message = new SelectFromYourBenchMessage(2);

            Assert.NotNull(SerializeAndBack(message));
        }
コード例 #4
0
        public void Process(GameField game, Player caster, Player opponent, PokemonCard pokemonSource)
        {
            if (!RequireTargetUsabled)
            {
                if (opponents && opponent.BenchedPokemon.Count == 0)
                {
                    return;
                }

                if (!opponents && caster.BenchedPokemon.Count == 0)
                {
                    return;
                }
            }

            if (OnlyOnCoinFlip && game.FlipCoins(1) == 0)
            {
                return;
            }

            if (IsChoice && !game.AskYesNo(caster, "Swap active Pokémon"))
            {
                return;
            }

            Player         selectedPlayer = opponentChooses ? opponent : caster;
            NetworkMessage message;

            if (selectedPlayer == caster)
            {
                if (opponents)
                {
                    message = new SelectFromOpponentBenchMessage(1).ToNetworkMessage(game.Id);
                    opponent.NetworkPlayer.Send(new InfoMessage("Opponent is selecting a new active pokemon for you").ToNetworkMessage(game.Id));
                }
                else
                {
                    message = new SelectFromYourBenchMessage(1).ToNetworkMessage(game.Id);
                    opponent.NetworkPlayer.Send(new InfoMessage("Opponent is selecting a new active pokemon").ToNetworkMessage(game.Id));
                }
            }
            else
            {
                if (opponents)
                {
                    message = new SelectFromYourBenchMessage(1).ToNetworkMessage(game.Id);
                    caster.NetworkPlayer.Send(new InfoMessage("Opponent is selecting a new active pokemon").ToNetworkMessage(game.Id));
                }
                else
                {
                    message = new SelectFromOpponentBenchMessage(1).ToNetworkMessage(game.Id);
                    caster.NetworkPlayer.Send(new InfoMessage("Opponent is selecting a new active pokemon for you").ToNetworkMessage(game.Id));
                }
            }

            NetworkId selectedId = selectedPlayer.NetworkPlayer.SendAndWaitForResponse <CardListMessage>(message).Cards.First();

            var targetPlayer = opponents ? opponent : caster;

            targetPlayer.ForceRetreatActivePokemon((PokemonCard)game.Cards[selectedId], game);
        }