示例#1
0
 /// <summary>
 /// Adds cards to local user's hand.
 /// </summary>
 private void OnStartingHandReceived(MatchMessageStartingHand message)
 {
     if (message.PlayerId == NakamaSessionManager.Instance.Session.UserId)
     {
         Debug.Log("Starting hands received");
         for (int i = 0; i < message.Cards.Count; i++)
         {
             _localHandPanel.DrawCard(message.Cards[i], i);
         }
         _localGold.Restart();
         _localGoldPanel.Init(_localGold);
     }
 }
示例#2
0
        /// <summary>
        /// Selects a number of cards equal to <see cref="Hand._cardsInHand"/> from players deck
        /// and sends them to that player.
        /// </summary>
        private async Task SendStartingHandAsync(IUserPresence presence)
        {
            if (presence.UserId == MatchCommunicationManager.Instance.HostId)
            {
                List <Card> cards = await _localHand.InitAsync(presence.UserId);

                MatchMessageStartingHand message = new MatchMessageStartingHand(presence.UserId, cards);
                MatchCommunicationManager.Instance.SendMatchStateMessageSelf(MatchMessageType.StartingHand, message);
            }
            else
            {
                List <Card> cards = await _opponentHand.InitAsync(presence.UserId);

                MatchMessageStartingHand message = new MatchMessageStartingHand(presence.UserId, cards);
                MatchCommunicationManager.Instance.SendMatchStateMessage(MatchMessageType.StartingHand, message);
                _opponentGold.Restart();
            }
        }
        /// <summary>
        /// Reads match messages sent by other players, and fires locally events basing on opCode.
        /// </summary>
        /// <param name="opCode"></param>
        /// <param name="messageJson"></param>
        public void ReceiveMatchStateHandle(long opCode, string messageJson)
        {
            if (GameStarted == false)
            {
                _incommingMessages.Enqueue(new IncommingMessageState(opCode, messageJson));
                return;
            }

            //Choosing which event should be invoked basing on opCode, then parsing json to MatchMessage class and firing event
            switch ((MatchMessageType)opCode)
            {
            //GAME
            case MatchMessageType.MatchEnded:
                MatchMessageGameEnded matchMessageGameEnded = MatchMessageGameEnded.Parse(messageJson);
                OnGameEnded?.Invoke(matchMessageGameEnded);
                break;

            //UNITS
            case MatchMessageType.UnitSpawned:
                MatchMessageUnitSpawned matchMessageUnitSpawned = MatchMessageUnitSpawned.Parse(messageJson);
                OnUnitSpawned?.Invoke(matchMessageUnitSpawned);
                break;

            case MatchMessageType.UnitMoved:
                MatchMessageUnitMoved matchMessageUnitMoved = MatchMessageUnitMoved.Parse(messageJson);
                OnUnitMoved?.Invoke(matchMessageUnitMoved);
                break;

            case MatchMessageType.UnitAttacked:
                MatchMessageUnitAttacked matchMessageUnitAttacked = MatchMessageUnitAttacked.Parse(messageJson);
                OnUnitAttacked?.Invoke(matchMessageUnitAttacked);
                break;

            //SPELLS
            case MatchMessageType.SpellActivated:
                MatchMessageSpellActivated matchMessageSpellActivated = MatchMessageSpellActivated.Parse(messageJson);
                OnSpellActivated?.Invoke(matchMessageSpellActivated);
                break;

            //CARDS
            case MatchMessageType.CardPlayRequest:
                if (IsHost == true)
                {
                    MatchMessageCardPlayRequest matchMessageCardPlayRequest = MatchMessageCardPlayRequest.Parse(messageJson);
                    OnCardRequested?.Invoke(matchMessageCardPlayRequest);
                }
                break;

            case MatchMessageType.CardPlayed:
                MatchMessageCardPlayed matchMessageCardPlayed = MatchMessageCardPlayed.Parse(messageJson);
                OnCardPlayed?.Invoke(matchMessageCardPlayed);
                break;


            case MatchMessageType.CardCanceled:
                MatchMessageCardCanceled matchMessageCardCancelled = MatchMessageCardCanceled.Parse(messageJson);
                OnCardCancelled?.Invoke(matchMessageCardCancelled);
                break;

            case MatchMessageType.StartingHand:
                MatchMessageStartingHand matchMessageStartingHand = MatchMessageStartingHand.Parse(messageJson);
                OnStartingHandReceived?.Invoke(matchMessageStartingHand);
                break;
            }
        }