/// <summary> /// 当前控件加载完毕后,连线 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Tasks_Loaded(object sender, RoutedEventArgs e) { Grapic <MetaTaskInfo> data = (Grapic <MetaTaskInfo>)TTaskEditor.Data.Tasks.Instance.GetType() .GetField("Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(TTaskEditor.Data.Tasks.Instance); //添加所有控件 if (!File.Exists("ControlPos.txt")) { return; } if (data == null) { return; } List <MetaTaskInfo> allTaskInfos = data.AllNodes; //创建所有连线 foreach (var taskInfo in allTaskInfos) { if (taskInfo.Children != null) { foreach (var child in taskInfo.Children) { ApplicationState.MouseState = MouseState.MakeTranstion; ApplicationState.TransationFromElement = expanders[taskInfo.ID]; ApplicationState.TransationToElement = expanders[child.ID]; EndTranstion(null, null); } } } expanders = null; }
/// <summary /// 通过配置文件加载任务 /// </summary> /// <param name="path"></param> private void LoadTasks() { //首次读取 if (Data == null) { Data = new Grapic <RunTimeTaskInfo>(); Data.AllNodes = JsonConvert.DeserializeObject <List <RunTimeTaskInfo> >(Resources.Load <TextAsset>("Data/Task/TasksInitialData").text); } Data.RootNode = Data.AllNodes.Single(t => t.Parents == null); //头结点可达 Data.RootNode.CanVisit = true; //获取所有互斥任务 string[] allExclusiveTasks = Resources.Load <TextAsset>("Data/Task/ExclusiveTasks").text.Split(new string[] { "\r\n" }, StringSplitOptions.None); foreach (var exclusiveTaskPair in allExclusiveTasks) { string[] taskpair = exclusiveTaskPair.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); exlucsionTaskDic.Add(taskpair[0], taskpair[1]); } //触发互斥任务不可达 Data.AllNodes.ForEach(n => n.Overd += t => { if (t.Parents == null || t.Parents.Count != 1) { return; } var sibling = t.Parents[0].Children.Where(c => c.ID != n.ID); if (exlucsionTaskDic.AllKeys.Contains <string>(t.ID.ToString())) { string[] exclusiveIds = exlucsionTaskDic.GetValues(t.ID.ToString()); if (exclusiveIds == null) { return; } sibling.ToList().ForEach(s => { if (exclusiveIds.Contains(s.ID.ToString())) { s.CanVisit = false; } }); } }); }
/// <summary /// 通过配置文件加载任务 /// </summary> /// <param name="path"></param> private void LoadTasks() { Data = new Grapic <MetaTaskInfo>(); Data.AllNodes = JsonConvert.DeserializeObject <List <MetaTaskInfo> >(Resources.Load <TextAsset>("Data/Task/MetaTasksData").text); //设置头结点 Data.RootNode = Data.AllNodes.Single(t => t.Parents == null); //头结点可达 Data.RootNode.CanVisit = true; //其余结点全部可达 Data.AllNodes.Where(t => t.ID != Data.RootNode.ID).ToList().ForEach(t => t.CanVisit = true); }
/// <summary> /// 初始化所有已保存任务 /// </summary> private void InitialAllTasks() { TTaskEditor.Data.Tasks.Instance.LoadTasks("MetaTasksData.txt"); if (File.Exists("ControlPos.txt")) { string[] controlPoss = File.ReadAllLines("ControlPos.txt"); foreach (var cp in controlPoss) { string[] pos = cp.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); this.controlPos.Add(int.Parse(pos[0]), new Point(int.Parse(pos[1]), int.Parse(pos[2]))); } } Grapic <MetaTaskInfo> data = (Grapic <MetaTaskInfo>)TTaskEditor.Data.Tasks.Instance.GetType() .GetField("Data", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(TTaskEditor.Data.Tasks.Instance); //添加所有控件 if (!File.Exists("ControlPos.txt")) { return; } if (data == null) { return; } List <MetaTaskInfo> allTaskInfos = data.AllNodes; foreach (var taskInfo in allTaskInfos) { TaskItem taskItem = new TaskItem(); var pos = controlPos[taskInfo.ID]; Canvas.SetLeft(taskItem, pos.X); Canvas.SetTop(taskItem, pos.Y); MainCanvas.Children.Add(taskItem); allTasks.Add(taskItem); expanders.Add(taskInfo.ID, taskItem.TitleExpander); taskItem.MetaTaskInfo = taskInfo; } }