Example #1
0
        /// <summary>
        /// Invoked upon destruction of player's main castle.
        /// Sends game ending message.
        /// </summary>
        private void OnCastleDestroyed(Unit destroyedCastle)
        {
            if (destroyedCastle == _allyCastle)
            {
                Debug.Log("Enemy win");
                string winner                = MatchCommunicationManager.Instance.OpponentId;
                string loser                 = NakamaSessionManager.Instance.Session.UserId;
                string matchId               = MatchCommunicationManager.Instance.MatchId;
                float  matchDuration         = Time.unscaledTime - _timerStart;
                int    winnerTowersDestroyed = 1 + _allyTowers.Count(x => x.IsDestroyed == true);
                int    loserTowersDestroyed  = 0 + _enemyTowers.Count(x => x.IsDestroyed == true);

                MatchMessageGameEnded message = new MatchMessageGameEnded(winner, loser, matchId, winnerTowersDestroyed, loserTowersDestroyed, matchDuration);
                MatchCommunicationManager.Instance.SendMatchStateMessage(MatchMessageType.MatchEnded, message);
                MatchCommunicationManager.Instance.SendMatchStateMessageSelf(MatchMessageType.MatchEnded, message);
            }
            else
            {
                Debug.Log("Ally win");
                string winner                = NakamaSessionManager.Instance.Session.UserId;
                string loser                 = MatchCommunicationManager.Instance.OpponentId;
                string matchId               = MatchCommunicationManager.Instance.MatchId;
                float  matchDuration         = Time.unscaledTime - _timerStart;
                int    winnerTowersDestroyed = 1 + _enemyTowers.Count(x => x.IsDestroyed == true);
                int    loserTowersDestroyed  = 0 + _allyTowers.Count(x => x.IsDestroyed == true);

                MatchMessageGameEnded message = new MatchMessageGameEnded(winner, loser, matchId, winnerTowersDestroyed, loserTowersDestroyed, matchDuration);
                MatchCommunicationManager.Instance.SendMatchStateMessage(MatchMessageType.MatchEnded, message);
                MatchCommunicationManager.Instance.SendMatchStateMessageSelf(MatchMessageType.MatchEnded, message);
            }
        }
Example #2
0
        /// <summary>
        /// Invoked upon receiving end game message.
        /// Shows summary.
        /// </summary>
        private async void OnGameEnded(MatchMessageGameEnded message)
        {
            bool localWin = message.winnerId == NakamaSessionManager.Instance.Session.UserId;
            int  reward   = await MatchCommunicationManager.Instance.GetMatchRewardAsync(message.matchId);

            _summary.SetResult(localWin, reward);
            _summary.Show();
        }
 private void GameEnded(MatchMessageGameEnded obj)
 {
     _socket.ReceivedMatchPresence -= OnMatchPresence;
 }
        /// <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;
            }
        }
Example #5
0
 private async void OnGameEnded(MatchMessageGameEnded message)
 {
 }
Example #6
0
        /// <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;

            case MatchMessageType.TurnEnded:
                //MatchMessageEndTurn matchMessageTurnEnded = MatchMessageEndTurn.Parse(messageJson);
                //OnTurnEnded?.Invoke(matchMessageTurnEnded);
                GameManager.instance.StartTurn();
                break;

            case MatchMessageType.CardPlayed:
                MatchMessageCardPlayed cardPlayed = MatchMessageCardPlayed.Parse(messageJson);
                //OnTurnEnded?.Invoke(matchMessageTurnEnded);
                GameManager.instance.playHandler.OpponentPlayedMinion(cardPlayed.cardID, cardPlayed.cardType, cardPlayed.absPos, cardPlayed.netID);
                break;

            case MatchMessageType.CardDrawn:
                GameManager.instance.playHandler.OpponentDrewCard();
                break;

            case MatchMessageType.SpellActivated:
                MatchMessageSpellCast cast = MatchMessageSpellCast.Parse(messageJson);
                GameManager.instance.playHandler.OpponentCastSpell(cast.cardID, cast.targeted, cast.targetID, cast.modifier);
                break;

            case MatchMessageType.UnitAttacked:
                MatchMessageHandleCombat combat = MatchMessageHandleCombat.Parse(messageJson);
                //OnTurnEnded?.Invoke(matchMessageTurnEnded);
                GameManager.instance.playHandler.HandleIncomingCombat(combat.myNetID, combat.enemyNetID);
                break;

            case MatchMessageType.MatchStarted:
                Debug.Log("Recieved message: Match started!");
                if (GameManager.instance != null)
                {
                }
                //GameManager.instance.StartFirstTurn(IsHost);
                else
                {
                    Debug.Log("NULL GAME MANAGER");
                }
                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;
                 */
            }
        }