/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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(); } }
/// <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); }
/// <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(); }
/// <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); }
/// <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); } } }