コード例 #1
0
    private void sendGameOverEvent()
    {
        List <PlayerState> playerList = _gameMatchCore.matchState.playerGroup.getPlayerList();
        MatchOverEvent     matchEvent = MatchOverEvent.Create(playerList);

        string eventJson = JsonUtility.ToJson(matchEvent);

        RaiseEventOptions options = new RaiseEventOptions();

        options.Receivers = ReceiverGroup.All;

        PhotonNetwork.RaiseEvent(NetworkOpCodes.MATCH_OVER, eventJson, true, options);
    }
コード例 #2
0
    public static MatchOverEvent Create(List <PlayerState> playerRanking)
    {
        MatchOverEvent         turn     = new MatchOverEvent();
        List <PlayerMatchRank> rankList = new List <PlayerMatchRank>(playerRanking.Count);

        for (int i = 0; i < playerRanking.Count; ++i)
        {
            PlayerState     state      = playerRanking[i];
            PlayerMatchRank playerRank = new PlayerMatchRank()
            {
                name              = state.name,
                score             = state.score,
                cardCount         = state.deadCustomerStack.Count,
                positiveCardCount = state.positiveCustomerCount
            };

            rankList.Add(playerRank);
        }

        turn.playerRanking = rankList;
        return(turn);
    }
コード例 #3
0
 private void onGameOver(bool gameOverPopup = true)
 {
     if (!gameOverPopup)
     {
         Singleton.instance.gui.screenFader.FadeOut(0.5f, () =>
         {
             if (_onGameOverCallback != null)
             {
                 _onGameOverCallback();
             }
         });
     }
     else
     {
         MatchOverEvent matchOver = MatchOverEvent.Create(_playerList);
         _gameOverPopupController.Start(matchOver.playerRanking, () =>
         {
             if (_onGameOverCallback != null)
             {
                 _onGameOverCallback();
             }
         });
     }
 }
コード例 #4
0
    private void onCustomEvent(byte eventCode, object content, int senderId)
    {
        bool isSenderThisPlayer = senderId == PhotonNetwork.player.ID;

        if (eventCode == NetworkOpCodes.PLAYER_TURN_COMPLETED)
        {
            Assert.IsTrue(PhotonNetwork.isMasterClient);
            _shockClock.Stop();

            EndTurnRequestEvent endTurn = JsonUtility.FromJson <EndTurnRequestEvent>(content as string);
            if (isSenderThisPlayer)
            {
                sendTurnOverEvent(endTurn.moveRequestList);
            }
            else if (attemptMoves(senderId, endTurn.moveRequestList, true))
            {
                sendTurnOverEvent(endTurn.moveRequestList);
            }

            if (_gameMatchCore.isGameOver)
            {
                sendGameOverEvent();
            }
        }
        else if (eventCode == NetworkOpCodes.BEGIN_NEXT_PLAYER_TURN)
        {
            ChangeTurnEvent changeTurn = JsonUtility.FromJson <ChangeTurnEvent>(content as string);
            Debug.Log("Active Player: " + changeTurn.activePlayerIndex);

            int previousPlayerId = _gameMatchCore.playerGroup.GetPlayerByIndex(changeTurn.previousPlayerIndex).id;

            bool isSamePlayer = previousPlayerId == PhotonNetwork.player.ID;
            if (!PhotonNetwork.isMasterClient && !isSamePlayer)
            {
                attemptMoves(previousPlayerId, changeTurn.moveRequestList, true);
                simulateOtherPlayerMakingMoves(changeTurn.moveResultList, () => onCompleteOtherPlayerAnimation(changeTurn));
            }
            else if (!isSamePlayer)
            {
                simulateOtherPlayerMakingMoves(changeTurn.moveResultList, () => onCompleteOtherPlayerAnimation(changeTurn));
            }
            else
            {
                onCompleteOtherPlayerAnimation(changeTurn);
            }

            _moveResultList.Clear();
        }
        else if (eventCode == NetworkOpCodes.MATCH_OVER)
        {
            MatchOverEvent matchOver = JsonUtility.FromJson <MatchOverEvent>(content as string);

            _gameOverPopupController.Start(matchOver.playerRanking, () =>
            {
                if (_onGameOverCallback != null)
                {
                    _onGameOverCallback();
                }
            });
        }
        else if (eventCode == NetworkOpCodes.PLAYBACK_CONFIRMED)
        {
            _playbackConfirm.Push(senderId);
            Debug.LogErrorFormat("Confirmed Count: {0}/{1}", _playbackConfirm.Count, _playerList.Count);
            //All players confirmed
            if (_playbackConfirm.Count >= _playerList.Count)
            {
                Debug.LogError("Engage Timer!");

                _playbackConfirm.Clear();
                _shockClock.Start(
                    kShockClockTurnTime,
                    kShockClockInterval,
                    onShockClockInterval,
                    onShockClockFinished);
            }
        }
        else if (eventCode == NetworkOpCodes.TIMER_UPDATE)
        {
            double time = (double)content;
            Debug.Log("Time: " + time);

            if (_playFieldController != null)
            {
                double timeLeft = (kShockClockTurnTime - time) / 1000.0;
                if (_playFieldController.shockClockView != null)
                {
                    _playFieldController.shockClockView.timerText = ((int)timeLeft).ToString();
                }

                if ((int)timeLeft <= 0 && isLocalPlayerActive)
                {
                    _playFieldController.ForceEndTurn();
                }
            }
        }
    }