Beispiel #1
0
 protected override void WaitingGameReadiness(int seconds = 30)
 {
     do
     {
         waitingService.Wait(1);
         if (PageObject.IsPagesTooLongNotChanged())
         {
             break;
         }
     } while (stateChecker.GetCurrentStartGameStates() ==
              StartGameStates.GameLoadingScreen);
     base.WaitingGameReadiness();
 }
        protected override void WaitingGameReadiness(int seconds = 30)
        {
            do
            {
                waitingService.Wait(1);
                if (PageObject.IsPagesTooLongNotChanged())
                {
                    break;
                }
            } while (stateChecker.GetCurrentFriendlyGameStartStates() ==
                     FriendlyGameStartStates.LoadingMatchSettings);

            base.WaitingGameReadiness();
        }
Beispiel #3
0
        public async void StartWorkAsync()
        {
            IsWork = true;

            var screenShotCreator = new GwentWindowScreenShotCreator();
            var cv            = new OpenCvGwentStateChecker(screenShotCreator);
            var inputEmulator = new AutoitInputDeviceEmulator();   //脚本输入模拟

            var pageFactory = new PageObjectFactory();

            LogText = new StringBuilder();

            await Task.Run(() =>
            {
                LogText.Append($"{DateTime.Now.ToString("s")}:  Start Work");
                GameStatusChanged?.Invoke(LogText.ToString());
                while (IsWork)
                {
                    try
                    {
                        if (screenShotCreator.IsGameWindowFullVisible())
                        {
                            // 页面监测 是否长时间未变化
                            if (PageObject.IsPagesTooLongNotChanged())
                            {
                                if (GwentProcessStarter.CloseProcess())
                                {
                                    GwentProcessStarter.StartProcess();
                                }
                            }

                            if (cv.GetCurrentGlobalGameStates() !=
                                GlobalGameStates.GameModesTab)
                            {
                                pageFactory.CheckAndClearGlobalMessageBoxes();

                                pageFactory
                                .CheckAndClearOpponentSurrenderedMessageBox();

                                pageFactory
                                .CheckAndClearGameSessionExceptionMessageBoxes();

                                var gameSess = cv.GetCurrentGameSessionStates();
                                GameStatusChanged?.Invoke(gameSess.ToString());

                                if (gameSess != GameSessionStates.Unknown)
                                {
                                    if (gameSess == GameSessionStates.MatchResultsScreen ||
                                        gameSess == GameSessionStates.MatchRewardsScreen)
                                    {
                                        new MatchResultsRewardsScreenPage(cv, new DefaultWaitingService(), inputEmulator,
                                                                          new Game(new Deck(""), new User("")))
                                        .ClosePageStatistics();
                                    }
                                    else
                                    {
                                        new GameSessionPage(cv, new DefaultWaitingService(), inputEmulator,
                                                            new Game(new Deck(""), new User("")))
                                        .GiveUp()
                                        .ClosePageStatistics();
                                    }
                                }
                                pageFactory.StartGame()?.GotoGameModesPage();
                            }

                            var gameModes = new GameModesPage(cv, new DefaultWaitingService(), inputEmulator)
                                            .GotoSeasonalGameMode()
                                            .EndMulligan()
                                            .GiveUp()
                                            .ClosePageStatistics();
                        }
                        else
                        {
                            if (GwentProcessStarter.WindowExists() == false)
                            {
                                GwentProcessStarter.StartProcess();
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        GameStatusChanged?.Invoke(e.Message);
                        if (!e.Message.Contains("This is not a page")) //Это не страница
                        {
                            logger.Error(e.Message + e.StackTrace);
                        }
                    }
                }
                LogText.Append($"{DateTime.Now.ToString("s")}:  Stop Work");
                GameStatusChanged?.Invoke(LogText.ToString());
            });
        }