예제 #1
0
        private void OnStartSelectingOpponentPokemon(object message, NetworkId messageId)
        {
            selectedCards.Clear();
            var selectOpponentMessage = ((SelectOpponentPokemonMessage)message);
            var maxCount = selectOpponentMessage.MaxCount;
            var minCount = selectOpponentMessage.MinCount;

            minSelectedCardCount = minCount;
            maxSelectedCardCount = maxCount;

            if (selectOpponentMessage.Filter != null)
            {
                currentDeckFilters.Add(selectOpponentMessage.Filter);
            }

            SpecialState = SpecialGameState.SelectingOpponentsPokemon;
            EnableButtons();

            if (!string.IsNullOrEmpty(selectOpponentMessage.Info))
            {
                infoText.text = selectOpponentMessage.Info;
            }
            else
            {
                var countString = maxCount == minCount?maxCount.ToString() : "up to " + maxCount;

                infoText.text = $"Select {countString} of your opponents Pokémon";
            }
        }
예제 #2
0
 private void OnStartEnterAmount(object message, NetworkId messageId)
 {
     SpecialState = SpecialGameState.EnteringAmount;
     EnterAmountPanel.gameObject.SetActive(true);
     EnterAmountPanel.Init((AskForAmountMessage)message);
     EnableButtons();
 }
예제 #3
0
 internal void StartAttachingEnergy(EnergyCard card)
 {
     SpecialState      = SpecialGameState.AttachingEnergyToPokemon;
     currentEnergyCard = card;
     infoText.text     = "Select a Pokémon to attach your energy to";
     EnableButtons();
 }
예제 #4
0
 internal void StartEvolving(PokemonCard card)
 {
     SpecialState        = SpecialGameState.SelectPokemonToEvolveOn;
     currentEvolvingCard = card;
     infoText.text       = "Select a Pokémon to evolve";
     EnableButtons();
 }
예제 #5
0
 private void OnYesNoMessage(object message, NetworkId messageId)
 {
     infoText.text = ((YesNoMessage)message).Message;
     SpecialState  = SpecialGameState.SelectingYesNo;
     YesButton.SetActive(true);
     NoButton.SetActive(true);
 }
예제 #6
0
 private void OnBeginSelectStatus(object message, NetworkId arg2)
 {
     SpecialState = SpecialGameState.SelectingStatus;
     EnableButtons();
     SelectStatusPanel.gameObject.SetActive(true);
     SelectStatusPanel.Init((PickStatusMessage)message);
 }
예제 #7
0
        private void OnBeginSelectYourPokemon(object message, NetworkId messageId)
        {
            var selectMessage = (SelectFromYourPokemonMessage)message;

            SpecialState = SpecialGameState.SelectPokemonMatchingFilter;
            EnableButtons();
            minSelectedCardCount = 1;
            maxSelectedCardCount = 1;

            if (!string.IsNullOrWhiteSpace(selectMessage.Info))
            {
                infoText.text = selectMessage.Info;
                currentDeckFilters.Add(new PokemonOwnerAndTypeFilter(myId));
            }
            else if (selectMessage.TargetTypes.Any())
            {
                var typeText = string.Join(" ", selectMessage.TargetTypes.Select(type => Enum.GetName(typeof(EnergyTypes), type)));
                infoText.text = $"Select one of your {typeText} Pokémon";
                currentDeckFilters.Add(new PokemonOwnerAndTypeFilter(myId, selectMessage.TargetTypes[0]));
            }
            else
            {
                infoText.text = "Select one of your Pokémon";
                currentDeckFilters.Add(new PokemonOwnerAndTypeFilter(myId));
            }

            if (selectMessage.Filter != null)
            {
                currentDeckFilters.Add(selectMessage.Filter);
            }
        }
예제 #8
0
        public void OnCancelClick()
        {
            SpecialState = SpecialGameState.None;
            selectFromListPanel.SetActive(false);

            if (IsMyTurn)
            {
                infoText.text = "Your turn!";
            }
            else
            {
                infoText.text = "Opponent's turn!";
            }

            foreach (var card in selectedCards)
            {
                ToggleCardSelected(GetCardRendererById(card.Id));
            }

            selectedCards.Clear();
            currentDeckFilters.Clear();
            currentEnergyCard   = null;
            currentEvolvingCard = null;
            EnableButtons();
        }
예제 #9
0
        private void OnStartDiscardCards(object message, NetworkId messageId)
        {
            var discardMessage = ((DiscardCardsMessage)message);

            selectedCards.Clear();
            SpecialState         = SpecialGameState.DiscardingCards;
            minSelectedCardCount = discardMessage.MinCount;
            maxSelectedCardCount = discardMessage.Count;
            currentDeckFilters.AddRange(discardMessage.Filters);

            EnableButtons();

            if (minSelectedCardCount > 1)
            {
                doneButton.SetActive(true);
            }

            if (!string.IsNullOrEmpty(discardMessage.Info))
            {
                infoText.text = discardMessage.Info;
            }
            else if (minSelectedCardCount != maxSelectedCardCount)
            {
                string cardsText = maxSelectedCardCount > 1 ? "cards" : "card";
                infoText.text = $"Discard up to {maxSelectedCardCount} {cardsText} from your hand";
            }
            else
            {
                string cardsText = minSelectedCardCount > 1 ? "cards" : "card";
                infoText.text = $"Discard {minSelectedCardCount} {cardsText} from your hand";
            }
        }
예제 #10
0
        internal void StartRetreating(PokemonCard pokemonCard)
        {
            var totalAttachedEnergy = pokemonCard.AttachedEnergy.Sum(energy => energy.GetEnergry().Amount);
            int retreatCost         = Math.Max(pokemonCard.RetreatCost + gameField.GetRetreatCostModified(), 0);

            if (retreatCost == 0)
            {
                infoText.text = "Select new active Pokémon";
                SpecialState  = SpecialGameState.SelectingRetreatTarget;
                selectedCards.Clear();
            }
            else if (totalAttachedEnergy == retreatCost)
            {
                infoText.text = "Select new active Pokémon";
                SpecialState  = SpecialGameState.SelectingRetreatTarget;
                selectedCards.Clear();
                selectedCards.AddRange(pokemonCard.AttachedEnergy);
            }
            else
            {
                infoText.text = "Pick energy to use for retreat";
                SpecialState  = SpecialGameState.SelectEnergyToRetreat;
                selectedCards.Clear();
                selectFromListPanel.SetActive(true);
                selectFromListPanel.GetComponent <SelectFromListPanel>().InitEnergyCountSelect(pokemonCard.AttachedEnergy, pokemonCard.RetreatCost);
            }

            EnableButtons();
        }
예제 #11
0
        public void OnAttackSelected(Attack attack)
        {
            selectAttackPanel.GetComponentInChildren <VerticalLayoutGroup>().gameObject.DestroyAllChildren();
            selectAttackPanel.SetActive(false);

            SpecialState = SpecialGameState.None;
            NetworkManager.Instance.SendToServer(new AttackMessage(attack), true);
        }
예제 #12
0
 internal void SelectedEnergyForRetreat(List <Card> payedEnergy)
 {
     infoText.text = "Select new active Pokémon";
     SpecialState  = SpecialGameState.SelectingRetreatTarget;
     selectedCards.Clear();
     selectedCards.AddRange(payedEnergy);
     EnableButtons();
 }
예제 #13
0
 private void OnStartPickPrize(object message, NetworkId messageId)
 {
     infoText.text = "Select 1 prize card";
     SpecialState  = SpecialGameState.SelectingPrize;
     selectFromListPanel.SetActive(true);
     selectFromListPanel.GetComponent <SelectFromListPanel>().Init((SelectPrizeCardsMessage)message, Player.PrizeCards);
     EnableButtons();
 }
예제 #14
0
        private void OnStartSelectColor(object message, NetworkId messageId)
        {
            var colorMessage = (SelectColorMessage)message;

            selectColorPanel.gameObject.SetActive(true);
            selectColorPanel.Init(colorMessage);
            SpecialState = SpecialGameState.SelectingColor;
        }
예제 #15
0
 public void OnStatusSelected(StatusEffect status)
 {
     NetworkManager.Instance.SendToServer(new StatusEffectMessage()
     {
         StatusEffect = status
     }, true);
     SpecialState = SpecialGameState.None;
     EnableButtons();
 }
예제 #16
0
 public void OnNoClicked()
 {
     SpecialState = SpecialGameState.None;
     NetworkManager.Instance.SendToServer(new YesNoMessage {
         AnsweredYes = false
     }, true);
     YesButton.SetActive(false);
     NoButton.SetActive(false);
 }
예제 #17
0
 internal void OnEnergyTypeClicked(EnergyTypes energyType)
 {
     if (SpecialState == SpecialGameState.SelectingColor)
     {
         SpecialState = SpecialGameState.None;
         NetworkManager.Instance.SendToServer(new SelectColorMessage(energyType), true);
         selectColorPanel.gameObject.SetActive(false);
         EnableButtons();
     }
 }
예제 #18
0
        private void OnCardsRevealed(object message, NetworkId arg2)
        {
            var revealMessage = (RevealCardsMessage)message;

            NetworkManager.Instance.RespondingTo = arg2;
            SpecialState = SpecialGameState.LookingAtRevealedCards;
            selectFromListPanel.SetActive(true);
            selectFromListPanel.GetComponent <SelectFromListPanel>().InitView(revealMessage.Cards);
            infoText.text = "Look at the revealed cards!";
            EnableButtons();
        }
예제 #19
0
        private void OnDeckSearch(object message, NetworkId messageId)
        {
            var deckSearch = (DeckSearchMessage)message;

            minSelectedCardCount = deckSearch.CardCount;
            maxSelectedCardCount = minSelectedCardCount;
            SpecialState         = SpecialGameState.SelectingFromList;
            selectFromListPanel.SetActive(true);
            selectFromListPanel.GetComponent <SelectFromListPanel>().Init(deckSearch);
            EnableButtons();
        }
예제 #20
0
        private void OnRetreatTargetSelected(CardRenderer clickedCard)
        {
            if (clickedCard.card.Id.Equals(Player.ActivePokemonCard.Id))
            {
                return;
            }

            SpecialState = SpecialGameState.None;
            NetworkManager.Instance.gameService.RetreatPokemon(gameField.Id, clickedCard.card.Id, selectedCards.Select(card => card.Id).ToList());
            selectedCards.Clear();
            EnableButtons();
        }
예제 #21
0
        private void OnStartPickFromList(object message, NetworkId messageId)
        {
            var pickFromListMessage = (PickFromListMessage)message;

            SpecialState = SpecialGameState.SelectingFromList;
            selectFromListPanel.SetActive(true);
            selectFromListPanel.GetComponent <SelectFromListPanel>().Init(pickFromListMessage);

            if (!string.IsNullOrEmpty(pickFromListMessage.Info))
            {
                infoText.text = pickFromListMessage.Info;
            }

            EnableButtons();
        }
예제 #22
0
        private void OnStartAttachingEnergyBench(object message, NetworkId messageId)
        {
            energyCardsToAttach.Clear();
            SpecialState = SpecialGameState.AttachingEnergyToBenchedPokemon;
            EnableButtons();

            var realMessage = (AttachEnergyCardsToBenchMessage)message;

            foreach (var card in realMessage.EnergyCards)
            {
                energyCardsToAttach.Enqueue(card);
            }

            infoText.text = $"Select one of your benched Pokémon to attach {realMessage.EnergyCards.First().GetName()} to";
        }
예제 #23
0
        private void TryEvolvePokemon(CardRenderer cardRenderer)
        {
            PokemonCard pokemon = cardRenderer.card as PokemonCard;

            if (pokemon == null)
            {
                return;
            }

            NetworkManager.Instance.gameService.EvolvePokemon(gameField.Id, pokemon.Id, currentEvolvingCard.Id);
            currentEvolvingCard = null;
            SpecialState        = SpecialGameState.None;
            infoText.text       = string.Empty;
            EnableButtons();
        }
예제 #24
0
        private void OnTryAttachEnergy(CardRenderer cardRenderer)
        {
            PokemonCard pokemon = cardRenderer.card as PokemonCard;

            if (pokemon == null || Player.Hand.Contains(pokemon) || !pokemon.Owner.Id.Equals(myId))
            {
                return;
            }

            NetworkManager.Instance.gameService.AttachEnergy(gameField.Id, pokemon.Id, currentEnergyCard.Id);
            currentEnergyCard = null;
            SpecialState      = SpecialGameState.None;
            infoText.text     = string.Empty;
            EnableButtons();
        }
예제 #25
0
        private void OnStartSelectAttack(object message, NetworkId messageId)
        {
            SpecialState = SpecialGameState.SelectingAttack;
            var selectAttackMessage = (SelectAttackMessage)message;

            selectAttackPanel.SetActive(true);
            var parent = selectAttackPanel.GetComponentInChildren <VerticalLayoutGroup>().gameObject;

            EnableButtons();
            foreach (var attack in selectAttackMessage.AvailableAttacks)
            {
                var buttonObject = Instantiate(attackButtonPrefab, parent.transform);
                buttonObject.GetComponentInChildren <Text>().text = attack.Name;
                buttonObject.GetComponent <Button>().onClick.AddListener(() => { OnAttackSelected(attack); });
            }
        }
예제 #26
0
        private void OnSelectPokemonWithFilter(CardRenderer clickedCard)
        {
            if (currentDeckFilters == null || currentDeckFilters.All(f => f.IsCardValid(clickedCard.card)))
            {
                if (Player.Hand.Contains(clickedCard.card))
                {
                    return;
                }
                else if (minSelectedCardCount == 1 && maxSelectedCardCount == 1)
                {
                    var message = new CardListMessage(new[] { clickedCard.card.Id }.ToList());
                    NetworkManager.Instance.SendToServer(message, true);
                    SpecialState  = SpecialGameState.None;
                    infoText.text = string.Empty;
                    currentDeckFilters.Clear();
                    return;
                }

                ToggleCardSelected(clickedCard);
            }
        }
예제 #27
0
        public void OnGameUpdated(object message, NetworkId messageId)
        {
            var gameMessage = message is GameFieldMessage ? ((GameFieldMessage)message).Game : (GameField)message;

            Debug.Log("Game updated, handling message");

            GameFieldState oldState = gameField.GameState;

            gameField = gameMessage;

            if (gameField.GameState == GameFieldState.WaitingForConnection)
            {
                return;
            }

            IsMyTurn     = gameField.ActivePlayer.Id.Equals(myId);
            SpecialState = SpecialGameState.None;
            selectColorPanel.gameObject.SetActive(false);
            selectedCards.Clear();
            selectFromListPanel.SetActive(false);

            SetInfoAndEnableButtons();

            Player me       = gameField.Players.First(p => p.Id.Equals(myId));
            Player opponent = gameField.Players.First(p => !p.Id.Equals(myId));

            playerHand.SetHand(me.Hand);

            SetActivePokemon(playerActivePokemon, me.ActivePokemonCard);
            SetActivePokemon(opponentActivePokemon, opponent.ActivePokemonCard);

            SetBenchedPokemon(playerBench, me.BenchedPokemon);
            SetBenchedPokemon(opponentBench, opponent.BenchedPokemon);

            stadiumCard.SetCard(gameField.StadiumCard, false, false);

            EnableButtons();
        }
예제 #28
0
        public void DoneButtonClicked()
        {
            if (gameField.GameState == GameFieldState.GameOver)
            {
                EnableButtons();
                SceneManager.LoadScene("MainMenu");
                return;
            }
            if (gameField.GameState == GameFieldState.BothSelectingBench)
            {
                NetworkManager.Instance.gameService.AddToBench(gameField.Id, myId, selectedCards.OfType <PokemonCard>().Select(card => card.Id).ToList());
                selectedCards.Clear();
            }
            else if (SpecialState == SpecialGameState.SelectingFromList)
            {
                var message = new CardListMessage(selectedCards.Select(card => card.Id).ToList());
                NetworkManager.Instance.SendToServer(message, true);
                SpecialState  = SpecialGameState.None;
                infoText.text = string.Empty;
            }
            else if (SpecialState == SpecialGameState.LookingAtRevealedCards)
            {
                NetworkManager.Instance.RespondingTo = null;
                return;
            }
            else if (SpecialState == SpecialGameState.SelectingOpponentsPokemon ||
                     SpecialState == SpecialGameState.SelectPokemonMatchingFilter)
            {
                if (selectedCards.Count < minSelectedCardCount || selectedCards.Count > maxSelectedCardCount)
                {
                    return;
                }

                foreach (var selectedCard in selectedCards)
                {
                    GetCardRendererById(selectedCard.Id).SetSelected(false);
                }

                var message = new CardListMessage(selectedCards.Select(card => card.Id).ToList());
                NetworkManager.Instance.SendToServer(message, true);
                SpecialState  = SpecialGameState.None;
                infoText.text = string.Empty;
                currentDeckFilters.Clear();
            }
            else if (SpecialState == SpecialGameState.SelectingOpponentsBenchedPokemon ||
                     SpecialState == SpecialGameState.SelectingYourBenchedPokemon ||
                     SpecialState == SpecialGameState.DiscardingCards)
            {
                if (selectedCards.Count < minSelectedCardCount || selectedCards.Count > maxSelectedCardCount)
                {
                    return;
                }

                foreach (var selectedCard in selectedCards)
                {
                    GetCardRendererById(selectedCard.Id).SetSelected(false);
                }

                var message = new CardListMessage(selectedCards.Select(card => card.Id).ToList());
                NetworkManager.Instance.SendToServer(message, true);
                SpecialState  = SpecialGameState.None;
                infoText.text = string.Empty;
                selectedCards.Clear();
                currentDeckFilters.Clear();
            }

            NetworkManager.Instance.RespondingTo = null;
            EnableButtons();
            currentDeckFilters.Clear();
        }
예제 #29
0
 internal void OnCardPicked()
 {
     SpecialState = SpecialGameState.None;
 }