// 言語切替 void ChangeLanguage(string culture) { // カルチャの切り替え ResourceService.Current.ChangeCulture(culture); var bindData = DataContext as MainWindowDC; bindData.MenuHeaderBackgroundOther = ""; ChangeLanguageCheckMenu(culture); // その他必要な処理 sw.DrawChart(SupplyStore.MakeChartData()); }
int timerWindowSecond; //毎秒行う処理のために秒数を記憶 // コンストラクタ public MainWindow() { InitializeComponent(); MouseLeftButtonDown += (o, e) => DragMove(); // フォルダの有無をチェック if (!System.IO.Directory.Exists(@"pic\")) { System.IO.Directory.CreateDirectory(@"pic\"); } // 画面表示を初期化 DataContext = new MainWindowDC() { LoggingText = "", MenuHeaderBackgroundOther = "", }; // アプリの設定を初期化 TwitterOptionMenu.IsChecked = Properties.Settings.Default.ScreenshotForTwitterFlg; SetBackgroundCheck(Properties.Settings.Default.BackgroundColorType); ChangeLanguageCheckMenu(GetCulture()); // 周辺クラスの初期化 SceneRecognition.InitialSceneRecognition(); try { SupplyStore.ReadMainSupply(); addLog($"{Properties.Resources.LoggingTextReadSupplyData}:Success"); } catch (Exception) { addLog($"{Properties.Resources.LoggingTextReadSupplyData}:Failed"); } // タイマーを作成する DispatcherTimer m_Timer = new DispatcherTimer(DispatcherPriority.Normal, Dispatcher); m_Timer.Interval = TimeSpan.FromMilliseconds(200.0); m_Timer.Tick += new EventHandler(DispatcherTimer_Tick); // タイマーの実行開始 m_Timer.Start(); timerWindowSecond = DateTime.Now.Second; // タイマー画面を作成・表示 tw = new TimerWindow(); if (Properties.Settings.Default.ShowTimerWindowFlg) { tw.Show(); } // 資材記録画面を作成・表示 sw = new SupplyWindow(); if (Properties.Settings.Default.ShowSupplyWindowFlg) { sw.Show(); } }
// タイマー動作 private void DispatcherTimer_Tick(object sender, EventArgs e) { // 可能ならスクショを取得する Bitmap captureFrame = sp?.getScreenShot(TwitterOptionMenu.IsChecked); #region 毎フレーム毎の処理 // スクショが取得できていた場合 if (captureFrame != null) { #region シーンによる振り分け // シーンを判定する var scene = SceneRecognition.JudgeScene(captureFrame); // 現在認識しているシーンを表示する var culture = GetCulture(); SceneTextBlock.Text = $"{Properties.Resources.LoggingTextScene} : {(culture == "ja-JP" ? SceneRecognition.SceneStringJapanese[scene] : SceneRecognition.SceneString[scene])}"; // シーンごとに振り分ける var bindData = tw.DataContext as TimerValue; switch (scene) { case SceneRecognition.SceneType.Expedition: #region 遠征中なら、遠征時間を読み取る var expEndTime = SceneRecognition.getExpeditionTimer(captureFrame); foreach (var pair in expEndTime) { switch (pair.Key) { case 0: bindData.ExpTimer1 = pair.Value; break; case 1: bindData.ExpTimer2 = pair.Value; break; case 2: bindData.ExpTimer3 = pair.Value; break; case 3: bindData.ExpTimer4 = pair.Value; break; default: break; } } break; #endregion case SceneRecognition.SceneType.Build: #region 建造中なら、建造時間を読み取る var buildEndTime = SceneRecognition.getBuildTimer(captureFrame); foreach (var pair in buildEndTime) { switch (pair.Key) { case 0: bindData.BuildTimer1 = pair.Value; break; case 1: bindData.BuildTimer2 = pair.Value; break; case 2: bindData.BuildTimer3 = pair.Value; break; case 3: bindData.BuildTimer4 = pair.Value; break; default: break; } } break; #endregion case SceneRecognition.SceneType.Develop: #region 開発中なら、開発時間を読み取る var devEndTime = SceneRecognition.getDevTimer(captureFrame); foreach (var pair in devEndTime) { switch (pair.Key) { case 0: bindData.DevTimer1 = pair.Value; break; case 1: bindData.DevTimer2 = pair.Value; break; case 2: bindData.DevTimer3 = pair.Value; break; case 3: bindData.DevTimer4 = pair.Value; break; default: break; } } break; #endregion case SceneRecognition.SceneType.Dock: #region 入渠中なら、入渠時間を読み取る var dockEndTime = SceneRecognition.getDockTimer(captureFrame); foreach (var pair in dockEndTime) { switch (pair.Key) { case 0: bindData.DockTimer1 = pair.Value; break; case 1: bindData.DockTimer2 = pair.Value; break; case 2: bindData.DockTimer3 = pair.Value; break; case 3: bindData.DockTimer4 = pair.Value; break; default: break; } } break; #endregion case SceneRecognition.SceneType.Home: default: break; } #endregion #region 資材ロギング // MainSupplyは、前回のロギングから一定時間以上経っていて、かつ読み込み可能なシーンなら追記する if (SupplyStore.CanAddMainSupply() && SceneRecognition.CanReadMainSupply(captureFrame)) { // 現在時刻と資源量を取得 var nowTime = DateTime.Now; var supply = SceneRecognition.getMainSupply(captureFrame); // データベースに書き込み SupplyStore.AddMainSupply(nowTime, supply); addLog($"{Properties.Resources.LoggingTextAddSupplyData}"); // データベースを保存 try { SupplyStore.SaveMainSupply(); addLog($"{Properties.Resources.LoggingTextSaveSupplyData}:Success"); } catch (Exception) { addLog($"{Properties.Resources.LoggingTextSaveSupplyData}:Failed"); } // グラフに反映 sw.DrawChart(SupplyStore.MakeChartData()); } #endregion } #endregion #region 1秒ごとの処理 var timerWindowSecondNow = DateTime.Now.Second; if (timerWindowSecond != timerWindowSecondNow) { timerWindowSecond = timerWindowSecondNow; // スクショが取得できていた場合 if (captureFrame != null) { // ズレチェック if (sp.IsPositionShifting()) { addLog(Properties.Resources.LoggingTextFoundPS); addLog(Properties.Resources.LoggingTextTryFixPS); // ズレ修復の結果を代入 var tryFixPositionShifting = sp.TryPositionShifting(); GetScreenshotMenu.IsEnabled = ScreenShotButton.IsEnabled = tryFixPositionShifting; addLog($"{Properties.Resources.LoggingTextFixPS} : {(tryFixPositionShifting ? "Success" : "Failed")}"); if (tryFixPositionShifting) { addLog(" " + sp.getPositionStr()); } } } // タイマーの表示を更新する var bindData = tw.DataContext as TimerValue; bindData.RedrawTimerWindow(); } #endregion captureFrame?.Dispose(); }
// コンストラクタ public SupplyWindow() { InitializeComponent(); MouseLeftButtonDown += (o, e) => DragMove(); DrawChart(SupplyStore.MakeChartData()); }