Beispiel #1
0
        private bool WaitForScene(KancolleSceneTypes scene, double timeout)
        {
            DateTime start = DateTime.Now;

            while ((DateTime.Now - start).TotalMilliseconds <= timeout)
            {
                if (CurrentScene == scene)
                {
                    break;
                }
                Thread.Sleep(500);
            }
            return(CurrentScene == scene);
        }
Beispiel #2
0
        public List <KancolleActionEdge> Navigate(KancolleSceneTypes from, KancolleSceneTypes to)
        {
            if (from == to)
            {
                return(new List <KancolleActionEdge>());
            }
            VertexPredecessorRecorderObserver <KancolleSceneTypes, KancolleActionEdge> predecessorObserver = new VertexPredecessorRecorderObserver <KancolleSceneTypes, KancolleActionEdge>();

            predecessorObserver.Attach(shortestPathAlg);
            shortestPathAlg.Compute(from);
            IEnumerable <KancolleActionEdge> edges;

            if (predecessorObserver.TryGetPath(to, out edges))
            {
                return(edges.ToList());
            }
            return(null);
        }
Beispiel #3
0
        /// <summary>
        /// 线程阻塞,到达场景toScene
        /// </summary>
        /// <param name="toScene"></param>
        /// <returns></returns>
        private KancolleTaskResult ReachScene(KancolleSceneTypes toScene)
        {
            var edges = navigator.Navigate(CurrentScene.SceneType, toScene);

            if (edges == null)
            {
                return(new KancolleTaskResult(null, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】无法到达场景【{toScene.ToString()}】,无通向目的地的路径", NoNavigationPath));//无法到达界面
            }
            bool isFinished = false;

            while (!isFinished && edges.Count > 0)
            {
                isFinished = true;
                foreach (var edge in edges)
                {
                    //等待结果
                    if (!DoActionAndWaitForScene(edge, ActionTimeout))
                    {
                        edges = navigator.Navigate(CurrentScene.SceneType, toScene);
                        if (edges == null)
                        {
                            return(new KancolleTaskResult(null, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】无法到达场景【{toScene.ToString()}】,无通向目的地的路径", NoNavigationPath)); //无法到达界面
                        }
                        isFinished = false;                                                                                                                                               //中途有变,所以重新切换界面
                        break;
                    }
                    Thread.Sleep(1000);
                }
            }
            if (CurrentScene.SceneType == toScene)
            {
                return(new KancolleTaskResult(null, KancolleTaskResultType.Success, $"成功到达场景【{toScene}】", Success));
            }
            else
            {
                return(new KancolleTaskResult(null, KancolleTaskResultType.Fail, $"当前场景【{CurrentScene.SceneType}】无法到达场景【{toScene.ToString()}】,实际结果与导航预期不符", UnexceptedScene));//无法到达界面
            }
        }
Beispiel #4
0
 public KancolleScene(KancolleSceneTypes sceneType, KancolleSceneStates sceneState)
 {
     SceneType = sceneType; SceneState = sceneState;
 }
Beispiel #5
0
 public KancolleScene(KancolleSceneTypes sceneType)
 {
     this.SceneType = sceneType; SceneState = KancolleSceneStates.Unknown;
 }