public void RpcDiscardOperation(EventMessages.DiscardOperationInfo info) { var discardOperationState = new PlayerDiscardOperationState { CurrentRoundStatus = CurrentRoundStatus, CurrentPlayerIndex = info.CurrentTurnPlayerIndex, IsRichiing = info.IsRichiing, DiscardingLastDraw = info.DiscardingLastDraw, Tile = info.Tile, BonusTurnTime = info.BonusTurnTime, Zhenting = info.Zhenting, Operations = info.Operations, HandTiles = info.HandTiles, Rivers = info.Rivers }; StateMachine.ChangeState(discardOperationState); }
public override void OnServerStateEnter() { PhotonNetwork.AddCallbackTarget(this); if (CurrentRoundStatus.CurrentPlayerIndex != CurrentPlayerIndex) { Debug.LogError("[Server] currentPlayerIndex does not match, this should not happen"); CurrentRoundStatus.CurrentPlayerIndex = CurrentPlayerIndex; } UpdateRoundStatus(); Debug.Log($"[Server] CurrentRoundStatus: {CurrentRoundStatus}"); responds = new bool[players.Count]; operations = new OutTurnOperation[players.Count]; var rivers = CurrentRoundStatus.Rivers; // Get messages and send them to players for (int i = 0; i < players.Count; i++) { var info = new EventMessages.DiscardOperationInfo { PlayerIndex = i, CurrentTurnPlayerIndex = CurrentPlayerIndex, IsRichiing = IsRichiing, DiscardingLastDraw = DiscardLastDraw, Tile = DiscardTile, BonusTurnTime = CurrentRoundStatus.GetBonusTurnTime(i), Zhenting = CurrentRoundStatus.IsZhenting(i), Operations = GetOperations(i), HandTiles = CurrentRoundStatus.HandTiles(i), Rivers = rivers }; var player = CurrentRoundStatus.GetPlayer(i); ClientBehaviour.Instance.photonView.RPC("RpcDiscardOperation", player, info); } firstSendTime = Time.time; serverTimeOut = gameSettings.BaseTurnTime + CurrentRoundStatus.MaxBonusTurnTime + ServerConstants.ServerTimeBuffer; }