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); }
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); }
/// <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));//无法到达界面 } }
public KancolleScene(KancolleSceneTypes sceneType, KancolleSceneStates sceneState) { SceneType = sceneType; SceneState = sceneState; }
public KancolleScene(KancolleSceneTypes sceneType) { this.SceneType = sceneType; SceneState = KancolleSceneStates.Unknown; }