示例#1
0
        public override void OnServerStateEnter()
        {
            PhotonNetwork.AddCallbackTarget(this);
            if (IsLingShang)
            {
                justDraw = MahjongSet.DrawLingShang();
            }
            else
            {
                justDraw = MahjongSet.DrawTile();
            }
            CurrentRoundStatus.CurrentPlayerIndex = CurrentPlayerIndex;
            CurrentRoundStatus.LastDraw           = justDraw;
            CurrentRoundStatus.CheckFirstTurn(CurrentPlayerIndex);
            CurrentRoundStatus.BreakTempZhenting(CurrentPlayerIndex);
            Debug.Log($"[Server] Distribute a tile {justDraw} to current turn player {CurrentPlayerIndex}, "
                      + $"first turn: {CurrentRoundStatus.FirstTurn}.");
            var room = PhotonNetwork.CurrentRoom;

            for (int i = 0; i < players.Count; i++)
            {
                if (i == CurrentPlayerIndex)
                {
                    continue;
                }
                var info = new EventMessages.DrawTileInfo
                {
                    PlayerIndex     = i,
                    DrawPlayerIndex = CurrentPlayerIndex,
                    MahjongSetData  = MahjongSet.Data
                };
                var player = CurrentRoundStatus.GetPlayer(i);
                ClientBehaviour.Instance.photonView.RPC("RpcDrawTile", player, info);
            }

            var currentPlayer = CurrentRoundStatus.GetPlayer(CurrentPlayerIndex);

            ClientBehaviour.Instance.photonView.RPC("RpcDrawTile", currentPlayer, new EventMessages.DrawTileInfo
            {
                PlayerIndex     = CurrentPlayerIndex,
                DrawPlayerIndex = CurrentPlayerIndex,
                Tile            = justDraw,
                BonusTurnTime   = CurrentRoundStatus.GetBonusTurnTime(CurrentPlayerIndex),
                Zhenting        = CurrentRoundStatus.IsZhenting(CurrentPlayerIndex),
                Operations      = GetOperations(CurrentPlayerIndex),
                MahjongSetData  = MahjongSet.Data
            });
            firstSendTime = Time.time;
            serverTimeOut = gameSettings.BaseTurnTime
                            + CurrentRoundStatus.GetBonusTurnTime(CurrentPlayerIndex)
                            + ServerConstants.ServerTimeBuffer;
        }
示例#2
0
        public void RpcDrawTile(EventMessages.DrawTileInfo info)
        {
            var drawState = new PlayerDrawState
            {
                CurrentRoundStatus = CurrentRoundStatus,
                PlayerIndex        = info.DrawPlayerIndex,
                Tile           = info.Tile,
                BonusTurnTime  = info.BonusTurnTime,
                Zhenting       = info.Zhenting,
                MahjongSetData = info.MahjongSetData,
                Operations     = info.Operations
            };

            StateMachine.ChangeState(drawState);
        }