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; }
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); }