diff options
26 files changed, 489 insertions, 110 deletions
diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs index 2b3c3449..cb56f411 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; @@ -18,5 +19,54 @@ namespace Workflow return GUILayout.Button(name, EditorStyles.toolbarDropDown, GUILayout.Width(width)); } + + public static void DrawPortHandle(Rect rect, Color backgroundColor, Color typeColor) + { + Color col = GUI.color; + GUI.color = backgroundColor; + GUI.DrawTexture(rect, Res.tex_dot_outer); + GUI.color = typeColor; + GUI.DrawTexture(rect, Res.tex_dot); + GUI.color = col; + } + + /// <summary> + /// 从start的右中点到end的左中 + /// </summary> + /// <param name="start"></param> + /// <param name="end"></param> + public static void DrawNodeCurve(Rect start, Rect end) + { + Vector3 startPos = new Vector3(start.x + start.width, start.y + start.height / 2, 0); + Vector3 endPos = new Vector3(end.x, end.y + end.height / 2, 0); + Vector3 startTan = startPos + Vector3.right * 50; + Vector3 endTan = endPos + Vector3.left * 50; + Color shadowCol = new Color(0, 0, 0, 0.06f); + for (int i = 0; i < 3; i++) // Draw a shadow + Handles.DrawBezier(startPos, endPos, startTan, endTan, shadowCol, null, (i + 1) * 5); + Handles.DrawBezier(startPos, endPos, startTan, endTan, Color.black, null, 1); + } + + } + + + public static class Utils + { + public static IEnumerable<Type> GetAllSubclassOf(Type parent) + { + foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) + foreach (var t in a.GetTypes()) + if (t.IsSubclassOf(parent)) yield return t; + } + + public static T GetAttribute<T>(Type classType) where T : Attribute + { + T[] attrs = classType.GetCustomAttributes(typeof(T), true) as T[]; + if (attrs == null || attrs.Length == 0) + return null; + return attrs[0]; + } + } + } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs deleted file mode 100644 index ab27e02e..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace Workflow
-{
-
- public struct NodePosition
- {
- public Vector2 position;
- public Vector2 size;
- }
-
- /// <summary>
- /// 节点
- /// </summary>
- public class Node : ScriptableObject
- {
- // 节点名(包括路径,如Animation/RootMotion)
- public virtual string name { get { return "<node>"; } }
-
- // 图标路径,相对Resources目录
- public virtual string iconPath { get { return null; } }
-
- // 注解
- public virtual string note { get { return null; } }
-
- public List<Node> children;
-
- }
-
-}
diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs deleted file mode 100644 index 5f282702..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs +++ /dev/null @@ -1 +0,0 @@ -
\ No newline at end of file diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs index 074843d9..b3068dbd 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs @@ -9,11 +9,18 @@ namespace Workflow public class WorkflowEditor : EditorWindow { [MenuItem("Erika/Workflow")] - static void OpenWorkflow() + public static void OpenWorkflow(WorkflowGraph graph) { - var w = EditorWindow.CreateInstance<WorkflowEditor>(); - w.titleContent = new GUIContent("Workflow"); - w.Show(); + if(editor == null) + { + editor = EditorWindow.CreateInstance<WorkflowEditor>(); + editor.Show(); + } + + currentWorkflow = graph; + + editor.titleContent = new GUIContent("[Workflow] " + graph.name); + editor.OnChangeGraph(); } public const float kToolbarButtonWidth = 50f; @@ -26,6 +33,10 @@ namespace Workflow private Vector2 m_ZoomAdjustment; private Vector2 m_Offset; + // 当前显示的workflow graph + private static WorkflowGraph currentWorkflow; + + private static WorkflowEditor editor; /// <summary> /// The size of the window. @@ -48,6 +59,21 @@ namespace Workflow } } + private void OnEnable() + { + editor = this; + } + + private void OnDisable() + { + editor = null; + } + + private void OnChangeGraph() + { + + } + private void OnGUI() { @@ -65,21 +91,11 @@ namespace Workflow CreateEditMenu(); } - if (GUIHelper.DropdownButton("View", kToolbarButtonWidth)) - { - CreateViewMenu(); - } - if (GUIHelper.DropdownButton("Settings", kToolbarButtonWidth + 10f)) { CreateSettingsMenu(); } - if (GUIHelper.DropdownButton("Tools", kToolbarButtonWidth)) - { - CreateToolsMenu(); - } - // Make the toolbar extend all throughout the window extension. GUILayout.FlexibleSpace(); @@ -119,21 +135,13 @@ namespace Workflow menu.AddItem(new GUIContent("Undo"), false, null); menu.AddItem(new GUIContent("Redo"), false, null); + menu.AddSeparator(""); + + GenericaMenu_AddNode(menu); menu.DropDown(new Rect(55f, kToolbarHeight, 0f, 0f)); } - private void CreateViewMenu() - { - var menu = new GenericMenu(); - - menu.AddItem(new GUIContent("Home"), false, null); - //menu.AddItem(new GUIContent("Zoom In"), false, () => { editor.Zoom(-1); }); - //menu.AddItem(new GUIContent("Zoom Out"), false, () => { editor.Zoom(1); }); - - menu.DropDown(new Rect(105f, kToolbarHeight, 0f, 0f)); - } - private void CreateSettingsMenu() { var menu = new GenericMenu(); @@ -143,16 +151,6 @@ namespace Workflow menu.DropDown(new Rect(155f, kToolbarHeight, 0f, 0f)); } - private void CreateToolsMenu() - { - var menu = new GenericMenu(); - - //menu.AddItem(new GUIContent("Add Test Nodes"), false, addTestNodes); - //menu.AddItem(new GUIContent("Clear Nodes"), false, clearNodes); - - menu.DropDown(new Rect(215f, kToolbarHeight, 0f, 0f)); - } - public void Pan(Vector2 delta) { panOffset += delta * zoomScale * panSpeed; @@ -169,6 +167,23 @@ namespace Workflow m_Zoom.Set(cap, cap); } + void GenericaMenu_AddNode(GenericMenu nodeMenu) + { + foreach(var nodeType in Utils.GetAllSubclassOf(typeof(WorkflowNode))) + { + WorkflowNodeAttribute attr = Utils.GetAttribute<WorkflowNodeAttribute>(nodeType); + if (attr == null) + continue; + string path = "Add Node/" + attr.path; + nodeMenu.AddItem(new GUIContent(path), false, OnAddNode, nodeType); + } + } + + void OnAddNode(object type) + { + + } + //------------------------------------------------------------------------------- // Node area //------------------------------------------------------------------------------- @@ -187,21 +202,21 @@ namespace Workflow float zoom = zoomScale; // Offset from origin in tile units - float xOffset = -(center.x * zoom + panOffset.x) / Res.gridTex.width; - float yOffset = ((center.y - size.y) * zoom + panOffset.y) / Res.gridTex.height; + float xOffset = -(center.x * zoom + panOffset.x) / Res.tex_grid.width; + float yOffset = ((center.y - size.y) * zoom + panOffset.y) / Res.tex_grid.height; Vector2 tileOffset = new Vector2(xOffset, yOffset); - m_Offset = Vector2.Scale(tileOffset, new Vector2(-Res.gridTex.width, Res.gridTex.height)); + m_Offset = Vector2.Scale(tileOffset, new Vector2(-Res.tex_grid.width, Res.tex_grid.height)); // Amount of tiles - float tileAmountX = Mathf.Round(size.x * zoom) / Res.gridTex.width; - float tileAmountY = Mathf.Round(size.y * zoom) / Res.gridTex.height; + float tileAmountX = Mathf.Round(size.x * zoom) / Res.tex_grid.width; + float tileAmountY = Mathf.Round(size.y * zoom) / Res.tex_grid.height; Vector2 tileAmount = new Vector2(tileAmountX, tileAmountY); // Draw tiled background - GUI.DrawTextureWithTexCoords(Size, Res.gridTex, new Rect(tileOffset, tileAmount)); + GUI.DrawTextureWithTexCoords(Size, Res.tex_grid, new Rect(tileOffset, tileAmount)); } @@ -225,19 +240,33 @@ namespace Workflow { Color defaultColor = GUI.color; - GUILayout.BeginArea(new Rect(m_Offset, new Vector2(200, 4000))); + GUILayout.BeginArea(new Rect(m_Offset, new Vector2(300, 4000))); - GUIStyle style = new GUIStyle(Res.nodeBody); - GUI.color = new Color32(90, 97, 105, 255); + GUIStyle style = new GUIStyle(Res.style_node_body); + GUI.color = new Color32(177, 184, 204, 255); GUILayout.BeginVertical(style); - GUILayout.Label("Title", Res.nodeHeader, GUILayout.Height(30)); + GUI.color = defaultColor; + + GUILayout.Label("Title", Res.style_node_header, GUILayout.Height(30)); - GUILayout.Label("buttonbuttonbuttonbuttonbuttonbuttonbuttonbutton"); + GUILayout.Label("ok"); + + var size = GUILayoutUtility.GetLastRect(); + + GUILayout.Label("ok"); GUILayout.EndVertical(); + + GUIHelper.DrawPortHandle(new Rect(0, size.y , 15, 15), Color.black, Color.yellow); + + size = GUILayoutUtility.GetLastRect(); + GUILayout.EndArea(); + GUIHelper.DrawNodeCurve(new Rect(m_Offset.x + size.x, m_Offset.y + size.y, 15, 15) + , new Rect(m_Offset.x + size.x + 100, m_Offset.y + size.y + 100, 15, 15)); + GUI.color = defaultColor; } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs new file mode 100644 index 00000000..af00ac61 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace Workflow +{ + + [CustomEditor(typeof(WorkflowGraph))] + public class WorkflowGraphInspector : Editor + { + + public override void OnInspectorGUI() + { + + if (GUILayout.Button("Workflow Editor", GUILayout.Height(50))) + { + WorkflowEditor.OpenWorkflow(this.target as WorkflowGraph); + } + + } + + } + +} diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta index 810f42a2..3aa29b14 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 542448ace01cd034c9cbf3d11ac73f66 +guid: 0bdaff1bd42ead845a58e846e989ef17 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs index 48214089..dccaf5ba 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs @@ -9,12 +9,13 @@ namespace Workflow public static class Res { - public static Texture2D gridTex; - public static Texture2D nodeBgTex; - - public static GUIStyle nodeBody; - public static GUIStyle nodeHeader; + public static Texture2D tex_grid; + public static Texture2D tex_node_bg; + public static Texture2D tex_dot; + public static Texture2D tex_dot_outer; + public static GUIStyle style_node_body; + public static GUIStyle style_node_header; public static bool loaded = false; @@ -26,23 +27,23 @@ namespace Workflow //[UnityEditor.Callbacks.DidReloadScripts] static void LoadAllResources() { - if (loaded) - return ; + if (loaded) return; loaded = true; + tex_grid = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/Grid"); + tex_node_bg = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/node_background"); + tex_dot = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/dot"); + tex_dot_outer = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/dot_outer"); - gridTex = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/Grid"); - nodeBgTex = UnityEngine.Resources.Load<Texture2D>("WorkflowVisualizer/node_background"); - - nodeBody = new GUIStyle(); - nodeBody.normal.background = nodeBgTex; - nodeBody.border = new RectOffset(32, 32, 32, 32); - nodeBody.padding = new RectOffset(16, 16, 4, 16); + style_node_body = new GUIStyle(); + style_node_body.normal.background = tex_node_bg; + style_node_body.border = new RectOffset(32, 32, 32, 32); + style_node_body.padding = new RectOffset(16, 16, 4, 16); - nodeHeader = new GUIStyle(); - nodeHeader.alignment = TextAnchor.MiddleCenter; - nodeHeader.fontStyle = FontStyle.Bold; - nodeHeader.normal.textColor = Color.white; + style_node_header = new GUIStyle(); + style_node_header.alignment = TextAnchor.MiddleCenter; + style_node_header.fontStyle = FontStyle.Bold; + style_node_header.normal.textColor = Color.white; } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/README.txt b/Erika/Assets/Tools/WorkflowVisualizer/README.txt index 06d0b39f..74417b04 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/README.txt +++ b/Erika/Assets/Tools/WorkflowVisualizer/README.txt @@ -1,2 +1,9 @@ -流程可视化
-Workflow Visualizer
\ No newline at end of file +流程可视化工具
+Workflow Visualizer
+
+提供工作流专用的图表工具
+ * 可视化展示工作流的每一步
+ * 每一步的工具引用
+ * 步骤之间的数据转移
+ * 同属于一个职能的步骤合为一个集合
+
diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png Binary files differnew file mode 100644 index 00000000..36c0ce93 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta new file mode 100644 index 00000000..f10747e2 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 1da06810ba4765c4b82be31ddbde7768 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png Binary files differnew file mode 100644 index 00000000..538cc9fa --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta new file mode 100644 index 00000000..980f9864 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 73c65a9634c1a3047a99ae6a88705632 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/README.txt.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta index 4bab09de..1bf7debb 100644 --- a/Erika/Assets/WorkflowGraphs/README.txt.meta +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta @@ -1,6 +1,7 @@ fileFormatVersion: 2 -guid: 0bbe120df72b7584c8a5babe278fc815 -TextScriptImporter: +guid: e3013c572c09f1240a990fbddbd682d0 +folderAsset: yes +DefaultImporter: externalObjects: {} userData: assetBundleName: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs index bb50bff2..c4e4604d 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs @@ -9,10 +9,11 @@ namespace Workflow /// <summary> /// 流程图 /// </summary> + [CreateAssetMenu(fileName = "New Workflow", menuName = "Workflow")] public class WorkflowGraph : ScriptableObject { - + } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta index 7f449997..41b8fbd2 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8d15234d39bd47e4d93a5d48161055be +guid: e6ad085c3b8c2f046a1b3d9a77fd457c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs new file mode 100644 index 00000000..67325c32 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Workflow +{ + + public struct NodePosition + { + public Vector2 position; + public Vector2 size; + } + + + /// <summary> + /// 节点 + /// </summary> + [Serializable] + public class WorkflowNode : ScriptableObject + { + // 节点名(包括路径,如Animation/RootMotion) + public virtual string title { get { return "<node>"; } } + + // 图标路径,相对Resources目录 + public virtual string iconPath { get { return ""; } } + + // 注解 + public virtual string note { get { return ""; } } + + public virtual void OnDraw() { } + + } + + /// <summary> + /// 目录 + /// </summary> + public class WorkflowNodeAttribute : Attribute + { + public string path; + public WorkflowNodeAttribute(string path) + { + this.path = path; + } + } + + /// <summary> + /// 连接线 + /// </summary> + [Serializable] + public class WorkflowNodeLink : ScriptableObject + { + public WorkflowNode from; + public WorkflowNode to; + + } + +}
\ No newline at end of file diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta index 76262c25..d54183f2 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d2d9b579e0562b2418478a1b97b77e13 +guid: 9e66560e0e8c1e249bb43483f135bc34 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Erika/Assets/WorkflowGraphs/README.txt b/Erika/Assets/WorkflowGraphs/README.txt deleted file mode 100644 index af287d96..00000000 --- a/Erika/Assets/WorkflowGraphs/README.txt +++ /dev/null @@ -1 +0,0 @@ -流程图
\ No newline at end of file diff --git a/Erika/Assets/WorkflowGraphs/Scripts.meta b/Erika/Assets/WorkflowGraphs/Scripts.meta new file mode 100644 index 00000000..53d79748 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35f19121978d0d94f84371c3d56d4f35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs new file mode 100644 index 00000000..8d4b87fe --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Workflow; + +namespace SkillWorkflow +{ + + [WorkflowNode("Skill Workflow/Rootmotion")] + public class RootmotionNode : WorkflowNode + { + + public override void OnDraw() + { + base.OnDraw(); + + + } + + } + +} diff --git a/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta new file mode 100644 index 00000000..6217ccc0 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b10b8dd0b218d0d43920825928db0f01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/Skill.asset b/Erika/Assets/WorkflowGraphs/Skill.asset new file mode 100644 index 00000000..ad7b9c15 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Skill.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e6ad085c3b8c2f046a1b3d9a77fd457c, type: 3} + m_Name: Skill + m_EditorClassIdentifier: diff --git a/Erika/Assets/WorkflowGraphs/Skill.asset.meta b/Erika/Assets/WorkflowGraphs/Skill.asset.meta new file mode 100644 index 00000000..5da143e4 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Skill.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c7eee3abcec8bd4185bf92167adc59d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset b/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset index d475d3f7..7812ad44 100644 --- a/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset +++ b/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset @@ -18,7 +18,7 @@ MonoBehaviour: - {fileID: 114232340257100334} - {fileID: 114484137410015790} - {fileID: 114067607725051884} - current: {fileID: 114471802820302434} + current: {fileID: 114319284393922042} --- !u!114 &114067607725051884 MonoBehaviour: m_ObjectHideFlags: 0 @@ -112,7 +112,7 @@ MonoBehaviour: m_Name: State Node m_EditorClassIdentifier: graph: {fileID: 11400000} - position: {x: -312, y: -376} + position: {x: -328, y: -360} ports: keys: - enter @@ -198,7 +198,7 @@ MonoBehaviour: m_Name: State m_EditorClassIdentifier: graph: {fileID: 11400000} - position: {x: 8, y: -184} + position: {x: 24, y: -168} ports: keys: - enter diff --git a/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx b/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx Binary files differindex c520eb30..c49127ec 100644 --- a/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx +++ b/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx diff --git a/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx Binary files differnew file mode 100644 index 00000000..6e8f159e --- /dev/null +++ b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx |