コード例 #1
0
ファイル: MainViewModel.cs プロジェクト: YSRKEN/AzLH
        // 毎秒ごとの処理を行う
        private async void HelperTaskS()
        {
            if (SaveScreenshotFlg.Value)
            {
                // ズレ検出・修正処理
                if (!ScreenShotProvider.CanGetScreenshot())
                {
                    // スクショが取得できなくなったのでその旨を通知する
                    PutLog("エラー:ゲーム画面の位置ズレを検出しました");
                    await AutoGetGameWindowPositionAsync();

                    return;
                }
                // スクショから得られる情報を用いた修正
                using (var screenShot = ScreenShotProvider.GetScreenshot()) {
                    switch (SceneRecognition.JudgeGameScene(screenShot))
                    {
                    case "戦闘中":
                        MainModel.SetBattleBombTimer(screenShot, ref oldGauge, ref remainTime);
                        break;

                    case "委託":
                        MainModel.SetConsignTimer(screenShot);
                        break;

                    case "戦術教室":
                        MainModel.SetLectureTimer(screenShot);
                        break;

                    case "寮舎":
                        MainModel.SetFoodTimer(screenShot);
                        break;
                    }
                }
            }
            else
            {
                // 常時座標認識
                if (AutoSearchPositionFlg.Value)
                {
                    GetGameWindowPosition();
                }
            }
        }
コード例 #2
0
ファイル: MainViewModel.cs プロジェクト: YSRKEN/AzLH
 // 定期的にスクリーンショットを取得し、そこに起因する処理を行う
 private void HelperTaskF()
 {
     if (!SaveScreenshotFlg.Value)
     {
         return;
     }
     using (var screenShot = ScreenShotProvider.GetScreenshot()) {
         // スクショが取得できるとscreenShotがnullにならない
         if (screenShot != null)
         {
             // シーン文字列を取得し、表示する
             string judgedScene = SceneRecognition.JudgeGameScene(screenShot);
             JudgedScene.Value = $"シーン判定 : {judgedScene}";
             // 資材量を取得する
             // (戦闘中なら各種ボムの分量と残り秒数を読み取る)
             if (SupplyStore.SupplyListEachScene.ContainsKey(judgedScene))
             {
                 foreach (string supplyName in SupplyStore.SupplyListEachScene[judgedScene])
                 {
                     if (SupplyStore.UpdateSupplyValue(screenShot, supplyName, AutoSupplyScreenShotFlg.Value, PutCharacterRecognitionFlg.Value))
                     {
                         PutLog($"資材量追記:{supplyName}");
                     }
                 }
             }
             // 戦闘中でなくなった場合、速やかにボムタイマーをリセットする
             if (judgedScene != "戦闘中" && judgedScene != "不明")
             {
                 SettingsStore.BombChageTime1 = null;
                 SettingsStore.BombChageTime2 = null;
                 SettingsStore.BombChageTime3 = null;
             }
         }
         else
         {
             // スクショが取得できなくなったのでその旨を通知する
             PutLog("エラー:スクショが取得できなくなりました");
             SaveScreenshotFlg.Value = false;
         }
     }
 }
コード例 #3
0
ファイル: MainViewModel.cs プロジェクト: YSRKEN/AzLH
        // ゲーム画面の座標を取得する
        private async void GetGameWindowPosition()
        {
            PutLog("座標取得開始...");
            try {
                // ゲーム画面の座標候補を検出する
                var rectList = await ScreenShotProvider.GetGameWindowPositionAsync().ConfigureAwait(false);

                // 候補数によって処理を分岐させる
                switch (rectList.Count)
                {
                case 0: {
                    // 候補なしと表示する
                    ScreenShotProvider.GameWindowRect = null;
                    PutLog("座標取得 : 失敗");
                    SaveScreenshotFlg.Value = false;
                }
                break;

                case 1: {
                    // 即座にその候補で確定させる
                    ScreenShotProvider.GameWindowRect = rectList[0];
                    PutLog("座標取得 : 成功");
                    PutLog($"ゲーム座標 : {Utility.GetRectStr((Rectangle)ScreenShotProvider.GameWindowRect)}");
                    SaveScreenshotFlg.Value = true;
                }
                break;

                default: {
                    // 各座標についてシーン認識を行い、認識可能だった座標が
                    // 0個→従来通りの選択画面を表示する
                    // 1個→その結果で確定させる
                    // 2個以上→認識可能だった座標だけで選択画面を表示する
                    var rectList2 = rectList.Where(rect => {
                            var bitmap   = ScreenShotProvider.GetScreenBitmap(rect);
                            string scene = SceneRecognition.JudgeGameScene(bitmap);
                            return(scene != "不明");
                        }).ToList();
                    switch (rectList2.Count)
                    {
                    case 0: {
                        // 選択画面を表示する
                        // http://blogs.wankuma.com/naka/archive/2009/02/12/168020.aspx
                        var dispatcher = Application.Current.Dispatcher;
                        if (dispatcher.CheckAccess())
                        {
                            ShowSelectGameWindow(rectList);
                        }
                        else
                        {
                            dispatcher.Invoke(() => {
                                        ShowSelectGameWindow(rectList);
                                    });
                        }
                    }
                    break;

                    case 1: {
                        // 即座にその候補で確定させる
                        ScreenShotProvider.GameWindowRect = rectList2[0];
                        PutLog("座標取得 : 成功");
                        PutLog($"ゲーム座標 : {Utility.GetRectStr((Rectangle)ScreenShotProvider.GameWindowRect)}");
                        SaveScreenshotFlg.Value = true;
                    }
                    break;

                    default: {
                        // 選択画面を表示する
                        // http://blogs.wankuma.com/naka/archive/2009/02/12/168020.aspx
                        var dispatcher = Application.Current.Dispatcher;
                        if (dispatcher.CheckAccess())
                        {
                            ShowSelectGameWindow(rectList2);
                        }
                        else
                        {
                            dispatcher.Invoke(() => {
                                        ShowSelectGameWindow(rectList2);
                                    });
                        }
                    }
                    break;
                    }
                }
                break;
                }
            } catch (Exception) {
                PutLog($"座標取得 : 失敗");
            }
        }