/// <summary> /// プレイヤーイベントの処理を行う関数(Update関数中の処理を移動したもの) /// </summary> private void ProcessPlayerEvent() { if (Data.PlayerEvents.Count != 0 && !SugorokuFrame.IsProcessingEvent) { if (Data.Player.PlayerID == Data.PlayerEvents.Peek().PlayerId) { state = State.WaitThrowDice; } else { SugorokuFrame.ProcessEvent(Data.PlayerEvents.Dequeue()); } } // ダイスを振る処理 if (state == State.WaitThrowDice && !SugorokuFrame.IsProcessingEvent && DiceTexture.AnimationFrame == 0) { SugorokuFrame.ProcessEvent(Data.PlayerEvents.Dequeue()); state = State.WaitOtherPlayer; } else if (state == State.WaitThrowDice && DiceButton.LeftClicked() && !SugorokuFrame.IsProcessingEvent) { DiceTexture.AnimationStart(Data.PlayerEvents.Peek().Dice); } DiceTexture.Update(); }
/// <summary> /// ゲームシーンの描画処理 /// </summary> public void Draw() { SugorokuFrame.Draw(); DiceButton.Draw(); DiceButton.MouseOverDraw(); DiceTexture.Draw(); MyPlayer.Draw(); MyPlayerText.DrawText(); FontAsset.Draw(MessageTextFont, MessageText, 0, 800, DX.GetColor(50, 50, 50)); if (state == State.DrawRanking) { SugorokuFrame.Draw(); CloseButton.Draw(); CloseButton.DrawText(); } }
/// <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 => "ゴールしました", _ => "" }; }
/// <summary> /// 初期化処理 /// </summary> /// <param name="data">各シーンで共用するクラス</param> public void Init(CommonData data) { MessageTextFont = FontAsset.Register("GameSceneUI", size: 40); var dicefont = FontAsset.Register("sugorokuDiceButton", size: 20); var handle = TextureAsset.Register("ButtonBase2", "../../../images/ButtonBase2.png"); DiceButton = new TextureButton(handle, 960, 800, 320, 160, "サイコロを振る", DX.GetColor(0, 103, 167), dicefont); CloseButton = new TextureButton(TextureAsset.GetTextureHandle("ButtonBase1"), 440, 800, 400, 50, "終わる", DX.GetColor(0, 103, 167), FontAsset.GetFontHandle("Default")); MyPlayer = new TextureButton(TextureAsset.Register("Toumei", "../../../images/toumei.png"), 680, 800, 120, 120); MyPlayerText = new TextureButton(TextureAsset.GetTextureHandle("Toumei"), 680, 920, 120, 40, "自分の駒", DX.GetColor(100, 100, 100), dicefont); DiceTexture = new DiceTexture(800, 800, 160, 160); SugorokuFrame = new SugorokuFrame(); data.MatchManager = new MatchCommunicationManager(data.Player.PlayerID, data.RoomName); PlayingEventTimer = new Timer(); WaitEventTimer = new Timer(); WaitEventTimer.Elapsed += (o, e) => WaitStartMatchTask(o, e, Data.Player.IsHost, data); WaitEventTimer.Interval = 5000; WaitEventTimer.AutoReset = true; WaitEventTimer.Enabled = true; WaitEventTimer.Start(); Data = data; DX.SetBackgroundColor(255, 255, 255); }