/// <summary> /// 試合開始までの待機中に通信などの処理を行う関数 /// </summary> /// <param name="_source"></param> /// <param name="_e"></param> /// <param name="isHost"></param> /// <param name="data"></param> private static void WaitStartMatchTask(object _source, ElapsedEventArgs _e, bool isHost, CommonData data) { var matchKey = data.RoomName; if (isHost) { state = (data.MatchManager.CanStartMatch(data.PlayerNum)) ? State.SugorokuFrameInitBefore : State.WaitMatchStart; if (state == State.SugorokuFrameInitBefore) { data.MatchManager.CloseJoinMatch(); } } else { state = (data.MatchManager.IsMatchStarted()) ? State.SugorokuFrameInitBefore : State.WaitMatchStart; } if (state == State.SugorokuFrameInitBefore) { WaitEventTimer.Stop(); var(r, matchStr) = data.MatchManager.GetMatchInfoString(); data.MatchInfoStr = "" + matchStr; for (int i = 0; !r; i++) { Task.Delay(5000); (r, matchStr) = data.MatchManager.GetMatchInfoString(); data.MatchInfoStr = "" + matchStr; if (i > 5) { state = State.Error; return; } } data.MatchInfo = JsonConvert.DeserializeObject <MatchInfo>(matchStr); PlayingEventTimer.Interval = 4000; PlayingEventTimer.AutoReset = true; PlayingEventTimer.Enabled = true; PlayingEventTimer.Elapsed += (o, e) => PlayingMatchTask(o, e, data); PlayingEventTimer.Start(); state = State.SugorokuFrameInit; } }
/// <summary> /// ゲームシーンの更新処理 /// </summary> public void Update() { if (state == State.SugorokuFrameInit) { SugorokuFrame.Init(Data.MatchInfo.Players); MyPlayer = new TextureButton(SugorokuFrame.PlayerTextureHandle[Data.Player.PlayerID], 680, 800, 120, 120); state = State.WaitOtherPlayer; WaitEventTimer.Dispose(); isProcessingPlayingEvent = false; } if (Data.PlayerEvents.Count == 0 && (state == State.Goal || IsGoal) && SugorokuFrame.IsEndAllAnimation()) { state = State.DrawRanking; SugorokuFrame.SetDrawRanking(Data.Ranking); } if (state == State.DrawRanking) { if (CloseButton.LeftClicked()) { DX.DxLib_End(); } return; } ProcessPlayerEvent(); SugorokuFrame.Update(); MessageText = (state) switch { State.WaitMatchStart => "試合の開始を待っています", State.WaitOtherPlayer => "他のプレイヤーの行動を待っています", State.WaitThrowDice => "さいころを振ってください", State.Error => "エラーが発生しました", State.Goal => "ゴールしました", _ => "" }; }