Exemple #1
0
        /// <summary>
        /// 查找任务点
        /// </summary>
        private void FindPoint(TaskPointBase taskPoint)
        {
            Vector2 target = new Vector2(position.width * 0.5f - taskPoint.Anchor.width * 0.5f, position.height * 0.5f - taskPoint.Anchor.height * 0.5f);
            Vector2 detail = target - taskPoint.Anchor.position;

            for (int i = 0; i < _currentContent.Points.Count; i++)
            {
                _currentContent.Points[i].Anchor.position += detail;
            }
        }
        /// <summary>
        /// 克隆任务点
        /// </summary>
        private void ClonePoint(TaskContentBase content, TaskPointBase point, Vector2 pos)
        {
            TaskPointBase taskPoint = point.Clone();

            taskPoint.Anchor        = new Rect(pos.x, pos.y, 0, 0);
            taskPoint.GUID          = Target.TaskPointIDName + Target.TaskPointIDSign.ToString();
            Target.TaskPointIDSign += 1;
            content.Points.Add(taskPoint);

            TaskContentAsset.GenerateSerializeSubObject(taskPoint, Target);
        }
Exemple #3
0
 /// <summary>
 /// 完成指定的任务点
 /// </summary>
 /// <param name="id">任务点ID</param>
 /// <param name="completeAction">完成后执行的操作</param>
 public void CompleteTaskPoint(string id, HTFAction completeAction = null)
 {
     if (_running)
     {
         TaskPointBase taskPoint = GetTaskPoint(id);
         if (taskPoint != null)
         {
             taskPoint.Complete(completeAction);
         }
     }
 }
        /// <summary>
        /// 新增任务点
        /// </summary>
        private void AddPoint(Type type, Vector2 position)
        {
            TaskPointBase taskPoint = CreateInstance(type) as TaskPointBase;

            taskPoint.Anchor        = new Rect(position.x, position.y, 200, 85);
            taskPoint.GUID          = _asset.TaskPointIDName + _asset.TaskPointIDSign.ToString();
            taskPoint.Details       = taskPoint.Name = "New Task Point " + _asset.TaskPointIDSign.ToString();
            _asset.TaskPointIDSign += 1;
            _currentContent.Points.Add(taskPoint);

            TaskContentBase.GenerateSerializeSubObject(taskPoint, _asset);
        }
Exemple #5
0
        /// <summary>
        /// 新增任务点
        /// </summary>
        private void AddPoint(TaskContentBase content, Type type, Vector2 pos)
        {
            TaskPointAttribute attribute = type.GetCustomAttribute <TaskPointAttribute>();
            TaskPointBase      taskPoint = CreateInstance(type) as TaskPointBase;

            taskPoint.Anchor = new Rect(pos.x, pos.y, 0, 0);
            taskPoint.GUID   = _contentAsset.TaskPointIDName + _contentAsset.TaskPointIDSign.ToString();
            taskPoint.Name   = (attribute != null ? attribute.GetLastName() : "New Task Point ") + _contentAsset.TaskPointIDSign.ToString();
            _contentAsset.TaskPointIDSign += 1;
            content.Points.Add(taskPoint);

            TaskContentAsset.GenerateSerializeSubObject(taskPoint, _contentAsset);
        }
Exemple #6
0
        /// <summary>
        /// 新增任务点
        /// </summary>
        private void AddPoint(Type type, Vector2 position)
        {
            TaskPointAttribute tpa       = type.GetCustomAttribute <TaskPointAttribute>();
            TaskPointBase      taskPoint = CreateInstance(type) as TaskPointBase;

            taskPoint.Anchor        = new Rect(position.x, position.y, 200, 85);
            taskPoint.GUID          = _asset.TaskPointIDName + _asset.TaskPointIDSign.ToString();
            taskPoint.Name          = (tpa != null ? tpa.GetLastName() : "New Task Point ") + _asset.TaskPointIDSign.ToString();
            _asset.TaskPointIDSign += 1;
            _currentContent.Points.Add(taskPoint);

            TaskContentBase.GenerateSerializeSubObject(taskPoint, _asset);
        }
Exemple #7
0
        /// <summary>
        /// 粘贴任务点
        /// </summary>
        private void PasteTaskPoint(GenericMenu gm, Vector2 pos)
        {
            string assetPath = AssetDatabase.GetAssetPath(_contentAsset);

            TaskContentBase content = null;
            TaskPointBase   point   = null;

            string[] buffers = GUIUtility.systemCopyBuffer.Split('|');
            if (buffers.Length == 4 && buffers[0] == "TaskPoint")
            {
                if (buffers[1] == assetPath)
                {
                    content = _contentAsset.Content.Find((s) => { return(s.GUID == buffers[2]); });
                    if (content)
                    {
                        point = content.Points.Find((s) => { return(s.GUID == buffers[3]); });
                    }
                }
                else
                {
                    TaskContentAsset taskContentAsset = AssetDatabase.LoadAssetAtPath <TaskContentAsset>(buffers[1]);
                    if (taskContentAsset)
                    {
                        content = taskContentAsset.Content.Find((s) => { return(s.GUID == buffers[2]); });
                        if (content)
                        {
                            point = content.Points.Find((s) => { return(s.GUID == buffers[3]); });
                        }
                    }
                }
            }

            if (point == null)
            {
                gm.AddDisabledItem(new GUIContent(GetWord("Paste")));
            }
            else
            {
                gm.AddItem(new GUIContent(GetWord("Paste") + " " + point.Name), false, () =>
                {
                    ClonePoint(_currentContent, point, pos);
                });
            }
        }
        /// <summary>
        /// 指引当前任务内容中指定的任务点
        /// </summary>
        /// <param name="taskPoint">任务点</param>
        public void GuideCurrentTaskPoint(TaskPointBase taskPoint)
        {
            if (!_running)
            {
                return;
            }

            if (Pause)
            {
                return;
            }

            if (_currentTaskContent == null)
            {
                return;
            }

            if (_currentTaskContent.Points.Contains(taskPoint) && taskPoint != null)
            {
                taskPoint.Guide();
            }
        }
Exemple #9
0
 /// <summary>
 /// 是否存在丢失脚本的对象
 /// </summary>
 internal bool IsExistMissed()
 {
     for (int i = 0; i < Content.Count; i++)
     {
         TaskContentBase content = Content[i];
         if (content == null)
         {
             return(true);
         }
         else
         {
             for (int j = 0; j < content.Points.Count; j++)
             {
                 TaskPointBase point = content.Points[j];
                 if (point == null)
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Exemple #10
0
        /// <summary>
        /// 复制任务点
        /// </summary>
        private void CopyTaskPoint(GenericMenu gm)
        {
            string assetPath = AssetDatabase.GetAssetPath(_contentAsset);
            int    number    = 0;

            for (int i = 0; i < _currentContent.Points.Count; i++)
            {
                TaskPointBase taskPoint = _currentContent.Points[i];
                if (taskPoint.IsSelected)
                {
                    number += 1;
                    gm.AddItem(new GUIContent(GetWord("Copy") + " " + taskPoint.Name), false, () =>
                    {
                        GUIUtility.systemCopyBuffer = string.Format("TaskPoint|{0}|{1}|{2}", assetPath, _currentContent.GUID, taskPoint.GUID);
                    });
                }
            }

            if (number == 0)
            {
                gm.AddDisabledItem(new GUIContent(GetWord("Copy")));
            }
        }
        /// <summary>
        /// 指引当前任务内容中指定的任务点
        /// </summary>
        /// <param name="id">任务点ID</param>
        public void GuideCurrentTaskPoint(string id)
        {
            if (!_running)
            {
                return;
            }

            if (Pause)
            {
                return;
            }

            if (_currentTaskContent == null)
            {
                return;
            }

            TaskPointBase taskPoint = _currentTaskContent.Points.Find((p) => { return(p.GUID == id); });

            if (taskPoint != null)
            {
                taskPoint.Guide();
            }
        }
        /// <summary>
        /// 任务点GUI事件处理
        /// </summary>
        private void OnPointEventHandle()
        {
            if (_currentContent != null && Event.current != null)
            {
                Vector2 mousePosition = Event.current.mousePosition;

                switch (Event.current.type)
                {
                case EventType.MouseDown:
                    if (Event.current.button == 1)
                    {
                        GenericMenu gm = new GenericMenu();
                        gm.AddItem(new GUIContent("<New Task Point Script>"), false, () =>
                        {
                            NewTaskPointScript();
                        });
                        List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(TaskPointBase)));
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type               type        = types[i];
                            string             contentName = type.FullName;
                            TaskPointAttribute attri       = type.GetCustomAttribute <TaskPointAttribute>();
                            if (attri != null)
                            {
                                contentName = attri.Name;
                            }
                            gm.AddItem(new GUIContent("Add Task Point/" + contentName), false, () =>
                            {
                                AddPoint(type, mousePosition);
                            });
                        }
                        StringToolkit.BeginNoRepeatNaming();
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            TaskPointBase point = _currentContent.Points[i];
                            gm.AddItem(new GUIContent(StringToolkit.GetNoRepeatName("Find Task Point/" + point.Name)), false, () =>
                            {
                                FindPoint(point);
                            });
                        }
                        gm.ShowAsContext();
                    }
                    break;

                case EventType.MouseDrag:
                    if (Event.current.button == 2)
                    {
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            _currentContent.Points[i].OnDrag(Event.current.delta);
                        }
                        GUI.changed = true;
                    }
                    break;
                }

                for (int i = 0; i < _currentContent.Points.Count; i++)
                {
                    _currentContent.Points[i].OnPointEventHandle(Event.current, _currentContent);
                }
            }
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task Content Number: " + _taskContentCount);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task Point Number: " + _taskPointCount);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Export Task Name To .txt"))
            {
                string path = EditorUtility.SaveFilePanel("保存数据文件", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Target.name, "txt");
                if (path != "")
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        EditorUtility.DisplayProgressBar("Export......", i + "/" + _taskContentCount, (float)i / _taskContentCount);
                        File.AppendAllText(path, "【" + Target.Content[i].Name + "】\r\n");
                        for (int j = 0; j < Target.Content[i].Points.Count; j++)
                        {
                            File.AppendAllText(path, Target.Content[i].Points[j].Name + "\r\n");
                        }
                    }
                    EditorUtility.ClearProgressBar();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Export Task Details To .txt"))
            {
                string path = EditorUtility.SaveFilePanel("保存数据文件", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Target.name, "txt");
                if (path != "")
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        EditorUtility.DisplayProgressBar("Export......", i + "/" + _taskContentCount, (float)i / _taskContentCount);
                        File.AppendAllText(path, "【" + Target.Content[i].Details + "】\r\n");
                        for (int j = 0; j < Target.Content[i].Points.Count; j++)
                        {
                            File.AppendAllText(path, Target.Content[i].Points[j].Details + "\r\n");
                        }
                    }
                    EditorUtility.ClearProgressBar();
                }
            }
            GUILayout.EndHorizontal();

            if (_isExistMissed)
            {
                GUILayout.BeginHorizontal();
                GUI.color = Color.red;
                if (GUILayout.Button("Clear Missed Task"))
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        TaskContentBase content = Target.Content[i];
                        if (content == null)
                        {
                            Target.Content.RemoveAt(i);
                            i -= 1;
                        }
                        else
                        {
                            for (int j = 0; j < content.Points.Count; j++)
                            {
                                TaskPointBase point = content.Points[j];
                                if (point == null)
                                {
                                    for (int d = 0; d < content.Depends.Count; d++)
                                    {
                                        if (content.Depends[d].OriginalPoint == j || content.Depends[d].DependPoint == j)
                                        {
                                            content.Depends.RemoveAt(d);
                                            d -= 1;
                                        }
                                        else
                                        {
                                            if (content.Depends[d].OriginalPoint > j)
                                            {
                                                content.Depends[d].OriginalPoint -= 1;
                                            }
                                            if (content.Depends[d].DependPoint > j)
                                            {
                                                content.Depends[d].DependPoint -= 1;
                                            }
                                        }
                                    }
                                    content.Points.RemoveAt(j);
                                    j -= 1;
                                }
                            }
                        }
                    }
                    _isExistMissed = false;
                    HasChanged();
                }
                GUI.color = Color.white;
                GUILayout.EndHorizontal();
            }
            else
            {
                GUILayout.BeginHorizontal();
                GUI.enabled = false;
                GUILayout.Button("Clear Missed Task");
                GUI.enabled = true;
                GUILayout.EndHorizontal();
            }

            _scroll = GUILayout.BeginScrollView(_scroll);
            for (int i = 0; i < Target.Content.Count; i++)
            {
                TaskContentBase content = Target.Content[i];
                if (content != null)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label(i + "." + content.Name);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    for (int j = 0; j < content.Points.Count; j++)
                    {
                        TaskPointBase point = content.Points[j];
                        if (point != null)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Space(20);
                            GUILayout.Label(j + "." + point.Name);
                            GUILayout.FlexibleSpace();
                            GUILayout.EndHorizontal();
                        }
                        else
                        {
                            GUILayout.BeginHorizontal();
                            GUI.color = Color.red;
                            GUILayout.Space(20);
                            GUILayout.Label(j + ".<Missing script>");
                            GUILayout.FlexibleSpace();
                            GUI.color = Color.white;
                            GUILayout.EndHorizontal();
                            _isExistMissed = true;
                        }
                    }
                }
                else
                {
                    GUILayout.BeginHorizontal();
                    GUI.color = Color.red;
                    GUILayout.Label(i + ".<Missing script>");
                    GUILayout.FlexibleSpace();
                    GUI.color = Color.white;
                    GUILayout.EndHorizontal();
                    _isExistMissed = true;
                }
            }
            GUILayout.EndScrollView();
        }
        /// <summary>
        /// 克隆
        /// </summary>
        public virtual TaskPointBase Clone()
        {
            TaskPointBase taskPoint = Main.Clone(this);

            return(taskPoint);
        }
        protected override void OnInspectorDefaultGUI()
        {
            base.OnInspectorDefaultGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task Content Number: " + _taskContentCount);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task Point Number: " + _taskPointCount);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Export Task Name To .txt"))
            {
                string path = EditorUtility.SaveFilePanel("保存数据文件", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Target.name, "txt");
                if (!string.IsNullOrEmpty(path))
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        EditorUtility.DisplayProgressBar("Export......", i + "/" + _taskContentCount, (float)i / _taskContentCount);
                        File.AppendAllText(path, "【" + Target.Content[i].Name + "】\r\n", Encoding.UTF8);
                        for (int j = 0; j < Target.Content[i].Points.Count; j++)
                        {
                            File.AppendAllText(path, Target.Content[i].Points[j].Name + "\r\n", Encoding.UTF8);
                        }
                    }
                    EditorUtility.ClearProgressBar();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Export Task Details To .txt"))
            {
                string path = EditorUtility.SaveFilePanel("保存数据文件", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), Target.name, "txt");
                if (!string.IsNullOrEmpty(path))
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        EditorUtility.DisplayProgressBar("Export......", i + "/" + _taskContentCount, (float)i / _taskContentCount);
                        File.AppendAllText(path, "【" + Target.Content[i].Details + "】\r\n", Encoding.UTF8);
                        for (int j = 0; j < Target.Content[i].Points.Count; j++)
                        {
                            File.AppendAllText(path, Target.Content[i].Points[j].Details + "\r\n", Encoding.UTF8);
                        }
                    }
                    EditorUtility.ClearProgressBar();
                }
            }
            GUILayout.EndHorizontal();

            if (_isExistMissed)
            {
                GUILayout.BeginHorizontal();
                GUI.backgroundColor = Color.red;
                if (GUILayout.Button("Clear Missed Task"))
                {
                    for (int i = 0; i < Target.Content.Count; i++)
                    {
                        TaskContentBase content = Target.Content[i];
                        if (content == null)
                        {
                            Target.Content.RemoveAt(i);
                            i -= 1;
                        }
                        else
                        {
                            for (int j = 0; j < content.Points.Count; j++)
                            {
                                TaskPointBase point = content.Points[j];
                                if (point == null)
                                {
                                    for (int d = 0; d < content.Depends.Count; d++)
                                    {
                                        if (content.Depends[d].OriginalPoint == j || content.Depends[d].DependPoint == j)
                                        {
                                            content.Depends.RemoveAt(d);
                                            d -= 1;
                                        }
                                        else
                                        {
                                            if (content.Depends[d].OriginalPoint > j)
                                            {
                                                content.Depends[d].OriginalPoint -= 1;
                                            }
                                            if (content.Depends[d].DependPoint > j)
                                            {
                                                content.Depends[d].DependPoint -= 1;
                                            }
                                        }
                                    }
                                    content.Points.RemoveAt(j);
                                    j -= 1;
                                }
                            }
                        }
                    }
                    _isExistMissed = false;
                    HasChanged();
                    AssetDatabase.SaveAssets();
                    AssetDatabase.Refresh();
                }
                GUI.backgroundColor = Color.white;
                GUILayout.EndHorizontal();
            }
            else
            {
                GUILayout.BeginHorizontal();
                GUI.enabled = false;
                GUILayout.Button("Clear Missed Task");
                GUI.enabled = true;
                GUILayout.EndHorizontal();
            }

            GUILayout.BeginHorizontal();
            GUI.backgroundColor = Color.yellow;
            if (GUILayout.Button("Import Task From Other", EditorGlobalTools.Styles.ButtonLeft))
            {
                string path = EditorUtility.OpenFilePanel("Import Task From Other", Application.dataPath, "asset");
                if (!string.IsNullOrEmpty(path))
                {
                    ImportTaskFromOther(path);
                }
            }
            GUI.enabled         = Target.Content.Count > 0;
            GUI.backgroundColor = Color.red;
            if (GUILayout.Button("Clear Task", EditorGlobalTools.Styles.ButtonRight))
            {
                if (EditorUtility.DisplayDialog("Prompt", "Are you sure you want to clear all task? It is not allow regrets!", "Yes", "No"))
                {
                    ClearTask();
                }
            }
            GUI.backgroundColor = Color.white;
            GUI.enabled         = true;
            GUILayout.EndHorizontal();

            _scroll = GUILayout.BeginScrollView(_scroll);
            for (int i = 0; i < Target.Content.Count; i++)
            {
                TaskContentBase content = Target.Content[i];
                if (content != null)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Label(i + "." + content.Name);
                    GUILayout.FlexibleSpace();
                    GUILayout.EndHorizontal();

                    for (int j = 0; j < content.Points.Count; j++)
                    {
                        TaskPointBase point = content.Points[j];
                        if (point != null)
                        {
                            GUILayout.BeginHorizontal();
                            GUILayout.Space(20);
                            GUILayout.Label(j + "." + point.Name);
                            GUILayout.FlexibleSpace();
                            GUILayout.EndHorizontal();
                        }
                        else
                        {
                            GUILayout.BeginHorizontal();
                            GUI.color = Color.red;
                            GUILayout.Space(20);
                            GUILayout.Label(j + ".<Missing script>");
                            GUILayout.FlexibleSpace();
                            GUI.color = Color.white;
                            GUILayout.EndHorizontal();
                            _isExistMissed = true;
                        }
                    }
                }
                else
                {
                    GUILayout.BeginHorizontal();
                    GUI.color = Color.red;
                    GUILayout.Label(i + ".<Missing script>");
                    GUILayout.FlexibleSpace();
                    GUI.color = Color.white;
                    GUILayout.EndHorizontal();
                    _isExistMissed = true;
                }
            }
            GUILayout.EndScrollView();
        }
Exemple #16
0
        /// <summary>
        /// 重新编译任务内容,在更改任务资源 ContentAsset 后,必须重新编译一次才可以开始任务流程
        /// </summary>
        /// <param name="disableTaskIDs">禁用的任务点ID集合(当为null时启用所有任务,禁用的任务不会触发)</param>
        public void RecompileTaskContent(HashSet <string> disableTaskIDs = null)
        {
            if (ContentAsset)
            {
                #region 搜寻任务目标
                _targets.Clear();
                //搜寻框架下所有任务目标
                List <TaskTarget> targetCaches = new List <TaskTarget>();
                Main.Current.transform.GetComponentsInChildren(true, targetCaches);
                for (int i = 0; i < targetCaches.Count; i++)
                {
                    if (!_targets.ContainsKey(targetCaches[i].GUID))
                    {
                        _targets.Add(targetCaches[i].GUID, targetCaches[i]);
                    }
                    else
                    {
                        GlobalTools.LogWarning(string.Format("任务控制者:发现相同GUID的目标!GUID:{0}\r\n目标物体:{1} 和 {2}", targetCaches[i].GUID, _targets[targetCaches[i].GUID].transform.FullName(), targetCaches[i].transform.FullName()));
                    }
                }
                //搜寻场景中所有任务目标
                GameObject[] rootObjs = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects();
                foreach (GameObject rootObj in rootObjs)
                {
                    targetCaches.Clear();
                    rootObj.transform.GetComponentsInChildren(true, targetCaches);
                    for (int i = 0; i < targetCaches.Count; i++)
                    {
                        if (!_targets.ContainsKey(targetCaches[i].GUID))
                        {
                            _targets.Add(targetCaches[i].GUID, targetCaches[i]);
                        }
                        else
                        {
                            GlobalTools.LogWarning(string.Format("任务控制者:发现相同GUID的目标!GUID:{0}\r\n目标物体:{1} 和 {2}", targetCaches[i].GUID, _targets[targetCaches[i].GUID].transform.FullName(), targetCaches[i].transform.FullName()));
                        }
                    }
                }
                #endregion

                #region 判断任务ID是否重复
                _taskContents.Clear();
                _taskPoints.Clear();
                for (int i = 0; i < ContentAsset.Content.Count; i++)
                {
                    TaskContentBase content = ContentAsset.Content[i];
                    if (_taskContents.ContainsKey(content.GUID))
                    {
                        GlobalTools.LogError(string.Format("任务控制者:发现相同GUID的任务内容!GUID:{0}\r\n任务内容:{1} 和 {2}", content.GUID, _taskContents[content.GUID].Name, content.Name));
                    }
                    else
                    {
                        _taskContents.Add(content.GUID, content);
                    }

                    for (int j = 0; j < content.Points.Count; j++)
                    {
                        TaskPointBase point = content.Points[j];
                        if (_taskPoints.ContainsKey(point.GUID))
                        {
                            GlobalTools.LogError(string.Format("任务控制者:发现相同GUID的任务点!GUID:{0}\r\n任务点:{1} 和 {2}", point.GUID, _taskPoints[point.GUID].Name, point.Name));
                        }
                        else
                        {
                            _taskPoints.Add(point.GUID, point);
                        }

                        if (_taskContents.ContainsKey(point.GUID))
                        {
                            GlobalTools.LogError(string.Format("任务控制者:发现相同GUID的任务内容和任务点!GUID:{0}\r\n任务内容:{1} 任务点:{2}", point.GUID, _taskContents[point.GUID].Name, point.Name));
                        }
                    }
                }
                #endregion

                #region 刷新任务状态
                foreach (var item in _taskContents)
                {
                    item.Value.ReSet();
                }
                foreach (var item in _taskPoints)
                {
                    item.Value.ReSet();
                }

                if (disableTaskIDs != null && disableTaskIDs.Count > 0)
                {
                    foreach (var item in disableTaskIDs)
                    {
                        if (_taskPoints.ContainsKey(item))
                        {
                            _taskPoints[item].IsEnable = false;
                        }
                    }
                }

                _currentContentIndex = 0;
                _currentContent      = null;
                _running             = false;
                #endregion
            }
            else
            {
                throw new HTFrameworkException(HTFrameworkModule.TaskEditor, "任务控制者:重新编译任务失败,任务控制者丢失了任务资源 TaskContentAsset!");
            }
        }
        protected override void OnBodyGUI()
        {
            base.OnBodyGUI();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task ID Name:", GUILayout.Width(90));
            _contentAsset.TaskIDName = EditorGUILayout.TextField(_contentAsset.TaskIDName);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Task ID Sign:", GUILayout.Width(90));
            GUI.enabled = false;
            _contentAsset.TaskIDSign = EditorGUILayout.IntField(_contentAsset.TaskIDSign);
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Point ID Name:", GUILayout.Width(90));
            _contentAsset.TaskPointIDName = EditorGUILayout.TextField(_contentAsset.TaskPointIDName);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Point ID Sign:", GUILayout.Width(90));
            GUI.enabled = false;
            _contentAsset.TaskPointIDSign = EditorGUILayout.IntField(_contentAsset.TaskPointIDSign);
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Start Index:", GUILayout.Width(90));
            _startIndex = EditorGUILayout.IntField(_startIndex);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Increment:", GUILayout.Width(90));
            _indexIncrement = EditorGUILayout.IntField(_indexIncrement);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Preview Task:", GUILayout.Width(90));
            GUILayout.Label(_contentAsset.TaskIDName + _startIndex.ToString());
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Preview Point:", GUILayout.Width(90));
            GUILayout.Label(_contentAsset.TaskPointIDName + _startIndex.ToString());
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Regen Task", EditorGlobalTools.Styles.ButtonLeft))
            {
                if (EditorUtility.DisplayDialog("Prompt", "Are you sure regen all task id?", "Yes", "No"))
                {
                    int index = _startIndex;
                    for (int i = 0; i < _contentAsset.Content.Count; i++)
                    {
                        _contentAsset.Content[i].GUID = _contentAsset.TaskIDName + index.ToString();
                        index += _indexIncrement;
                    }
                    _contentAsset.TaskIDSign = index;
                    EditorUtility.SetDirty(_contentAsset);
                    Close();
                }
            }
            if (GUILayout.Button("Regen Point", EditorGlobalTools.Styles.ButtonMid))
            {
                if (EditorUtility.DisplayDialog("Prompt", "Are you sure regen all task point id?", "Yes", "No"))
                {
                    int index = _startIndex;
                    for (int i = 0; i < _contentAsset.Content.Count; i++)
                    {
                        for (int j = 0; j < _contentAsset.Content[i].Points.Count; j++)
                        {
                            TaskPointBase taskPoint = _contentAsset.Content[i].Points[j];
                            taskPoint.GUID = _contentAsset.TaskPointIDName + index.ToString();
                            index         += _indexIncrement;
                        }
                    }
                    _contentAsset.TaskPointIDSign = index;
                    EditorUtility.SetDirty(_contentAsset);
                    Close();
                }
            }
            if (GUILayout.Button("Cancel", EditorGlobalTools.Styles.ButtonRight))
            {
                EditorUtility.SetDirty(_contentAsset);
                Close();
            }
            GUILayout.EndHorizontal();
        }
 /// <summary>
 /// 查找任务点
 /// </summary>
 private void FindPoint(TaskPointBase taskPoint)
 {
     taskPoint.Anchor.position = new Vector2(position.width / 2 - 150, position.height / 2 - 150);
 }
Exemple #19
0
        /// <summary>
        /// 任务点GUI事件处理
        /// </summary>
        private void OnPointEventHandle()
        {
            if (_currentContent != null && Event.current != null)
            {
                Vector2 pos = Event.current.mousePosition;

                switch (Event.current.type)
                {
                case EventType.MouseDown:
                    if (Event.current.button == 1)
                    {
                        GenericMenu gm = new GenericMenu();
                        gm.AddItem(new GUIContent(GetWord("Add Task Point") + "/默认"), false, () =>
                        {
                            AddPoint(_currentContent, typeof(TaskPointDefault), pos);
                        });
                        List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type =>
                        {
                            return(type.IsSubclassOf(typeof(TaskPointBase)) && !type.IsAbstract && type != typeof(TaskPointDefault));
                        });
                        for (int i = 0; i < types.Count; i++)
                        {
                            Type               type      = types[i];
                            string             pointName = type.FullName;
                            TaskPointAttribute attribute = type.GetCustomAttribute <TaskPointAttribute>();
                            if (attribute != null)
                            {
                                pointName = attribute.Name;
                            }
                            gm.AddItem(new GUIContent(GetWord("Add Task Point") + "/" + pointName), false, () =>
                            {
                                AddPoint(_currentContent, type, pos);
                            });
                        }
                        StringToolkit.BeginNoRepeatNaming();
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            TaskPointBase point = _currentContent.Points[i];
                            gm.AddItem(new GUIContent(StringToolkit.GetNoRepeatName(GetWord("Find Task Point") + "/" + point.Name)), false, () =>
                            {
                                FindPoint(point);
                            });
                        }
                        gm.AddSeparator("");
                        CopyTaskPoint(gm);
                        PasteTaskPoint(gm, pos);
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("Collapse All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsExpand      = false;
                            }
                            GUI.changed = true;
                        });
                        gm.AddItem(new GUIContent(GetWord("Expand All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsExpand      = true;
                            }
                            GUI.changed = true;
                        });
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("Enable All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsEnable      = true;
                            }
                            GUI.changed = true;
                        });
                        gm.AddItem(new GUIContent(GetWord("Disable All")), false, () =>
                        {
                            for (int i = 0; i < _currentContent.Points.Count; i++)
                            {
                                TaskPointBase point = _currentContent.Points[i];
                                point.IsEnable      = false;
                            }
                            GUI.changed = true;
                        });
                        gm.AddSeparator("");
                        gm.AddItem(new GUIContent(GetWord("<New Task Point Script>")), false, () =>
                        {
                            NewTaskPointScript();
                        });
                        gm.ShowAsContext();
                    }
                    break;

                case EventType.MouseDrag:
                    if (Event.current.button == 2)
                    {
                        for (int i = 0; i < _currentContent.Points.Count; i++)
                        {
                            _currentContent.Points[i].OnDrag(Event.current.delta);
                        }
                        GUI.changed = true;
                    }
                    break;

                case EventType.KeyDown:
                    switch (Event.current.keyCode)
                    {
                    case KeyCode.LeftAlt:
                    case KeyCode.RightAlt:
                        _isBreakDepend = true;
                        GUI.changed    = true;
                        break;
                    }
                    break;

                case EventType.KeyUp:
                    switch (Event.current.keyCode)
                    {
                    case KeyCode.LeftAlt:
                    case KeyCode.RightAlt:
                        _isBreakDepend = false;
                        GUI.changed    = true;
                        break;
                    }
                    break;
                }

                for (int i = 0; i < _currentContent.Points.Count; i++)
                {
                    _currentContent.Points[i].OnPointEventHandle(Event.current, _contentAsset, _currentContent, _getWord);
                }
            }
        }