/// <summary> /// 新增任务内容 /// </summary> private void AddContent(Type type) { TaskContentAttribute tca = type.GetCustomAttribute <TaskContentAttribute>(); TaskContentBase taskContent = CreateInstance(type) as TaskContentBase; taskContent.GUID = _asset.TaskIDName + _asset.TaskIDSign.ToString(); taskContent.Name = (tca != null ? tca.GetLastName() : "New Task ") + _asset.TaskIDSign.ToString(); _asset.TaskIDSign += 1; _asset.Content.Add(taskContent); _taskContentList.index = _asset.Content.Count - 1; _currentContent = taskContent; TaskContentBase.GenerateSerializeSubObject(taskContent, _asset); }
/// <summary> /// 生成任务内容列表 /// </summary> private void GenerateTaskList() { if (_taskContentList == null) { _taskContentList = new ReorderableList(_asset.Content, typeof(TaskContentBase), true, true, false, false); _taskContentList.drawHeaderCallback = (Rect rect) => { Rect sub = rect; sub.Set(rect.x, rect.y, 200, rect.height); GUI.Label(sub, "Task Content List:"); sub.Set(rect.x + rect.width - 20, rect.y - 2, 20, 20); if (GUI.Button(sub, _addGUIContent, "InvisibleButton")) { GenericMenu gm = new GenericMenu(); gm.AddItem(new GUIContent("<New Task Content Script>"), false, () => { NewTaskContentScript(); }); List <Type> types = ReflectionToolkit.GetTypesInRunTimeAssemblies(type => { return(type.IsSubclassOf(typeof(TaskContentBase))); }); for (int i = 0; i < types.Count; i++) { Type type = types[i]; string contentName = type.FullName; TaskContentAttribute attri = type.GetCustomAttribute <TaskContentAttribute>(); if (attri != null) { contentName = attri.Name; } gm.AddItem(new GUIContent(contentName), false, () => { AddContent(type); }); } gm.ShowAsContext(); } }; _taskContentList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (index >= 0 && index < _asset.Content.Count) { Rect sub = rect; GUI.Label(sub, (index + 1).ToString() + "." + _asset.Content[index].Name); if (isActive) { sub.Set(rect.x + rect.width - 40, rect.y, 20, 20); if (GUI.Button(sub, _editGUIContent, "InvisibleButton")) { MonoScript monoScript = MonoScript.FromScriptableObject(_asset.Content[index]); AssetDatabase.OpenAsset(monoScript); } sub.Set(rect.x + rect.width - 20, rect.y, 20, 20); if (GUI.Button(sub, _deleteGUIContent, "InvisibleButton")) { if (EditorUtility.DisplayDialog("Prompt", "Are you sure delete task [" + _asset.Content[index].Name + "]?", "Yes", "No")) { DeleteContent(index); } } } } }; _taskContentList.onSelectCallback = (ReorderableList list) => { if (list.index >= 0 && list.index < _asset.Content.Count) { _currentContent = _asset.Content[list.index]; } else { _currentContent = null; } }; _taskContentList.drawElementBackgroundCallback = (Rect rect, int index, bool isActive, bool isFocused) => { if (index >= 0 && index < _asset.Content.Count) { if (Event.current.type == EventType.Repaint) { GUIStyle gUIStyle = (index % 2 != 0) ? "CN EntryBackEven" : "CN EntryBackodd"; gUIStyle = (!isActive && !isFocused) ? gUIStyle : "RL Element"; gUIStyle.Draw(rect, false, isActive, isActive, isFocused); if (_asset.Content[index].IsDone) { GUI.backgroundColor = Color.green; GUI.Box(rect, ""); GUI.backgroundColor = Color.white; } } } }; } }