Пример #1
0
        private void StartPersistentScanning()
        {
            PersistentScanningTask = new Task(() =>
            {
                try
                {
                    GameOverScan gameOverData   = new GameOverScan();
                    RoundOverScan roundOverData = new RoundOverScan();

                    while (PersistentScan)
                    {
                        SpinWait.SpinUntil(() => { return(OnGameOver != null || OnRoundOver != null || OnDisconnect != null); });

                        using (LockHandler.Passive)
                        {
                            UpdateScreen();
                            ScanGameOver(gameOverData);
                            ScanRoundOver(roundOverData);
                            InvokeOnDisconnect();
                        }

                        Thread.Sleep(10); // End
                    }
                }
                catch (OverwatchClosedException) { }
            });
            PersistentScanningTask.Start();
        }
Пример #2
0
        private void ScanRoundOver(RoundOverScan roundOverScan)
        {
            if (OnRoundOver != null)
            {
                const int startX = 464;
                const int length = 100;
                const int y      = 105;

                bool isOver = false;

                // Check for the KOTH round over animation.
                Parallel.For(startX, startX + length, (x, loop) =>
                {
                    if (Capture.CompareTo(new Point(x, y), Markups.KOTH_ROUND_OVER, new int[] { 190, 185, 188 }, 70, 90))
                    {
                        isOver = true;
                        loop.Break();
                    }
                });

                // Check for the elimination round over animation.
                // Team wins
                if (!isOver)
                {
                    isOver = Capture.CompareTo(Points.LOBBY_ELIMINATION_ROUND_OVER, Markups.ELIM_ROUND_OVER, 30, 95, DBCompareFlags.IgnoreBlack);
                }

                // Draw
                if (!isOver)
                {
                    isOver = Capture.CompareTo(Points.LOBBY_ELIMINATION_ROUND_OVER_DRAW, Markups.ELIM_ROUND_OVER_DRAW, 30, 95, DBCompareFlags.IgnoreBlack);
                }

                if (isOver && !roundOverScan.Executed)
                {
                    OnRoundOver.Invoke(this, new EventArgs());
                    roundOverScan.Executed = true;
                }
                else if (!isOver && roundOverScan.Executed)
                {
                    roundOverScan.Executed = false;
                }
            }
        }