Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 完了時刻を読み取る
            var time = (ulong)value;
            // 現在時刻を読み取る
            var now_time = SceneRecognition.GetUnixTime(DateTime.Now);

            if (time <= now_time)
            {
                // 現在時刻≧完了時刻だと--:--:--になる
                return("--:--:--");
            }
            else
            {
                // 時間差を計算して画面に表示する
                var leastSecond = time - now_time;
                var hour        = leastSecond / (60 * 60);
                leastSecond -= hour * 60 * 60;
                var minute = leastSecond / 60;
                leastSecond -= minute * 60;
                var second = leastSecond;
                return(hour.ToString("D2") + ":" + minute.ToString("D2") + ":" + second.ToString("D2"));
            }
        }
Exemplo n.º 3
0
        // タイマー動作
        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();
        }