summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-08-01 09:27:48 +0800
committerchai <chaifix@163.com>2022-08-01 09:27:48 +0800
commit2de9e6f4e3d8ac8fdea85f54b53b0a795e9e2707 (patch)
tree07f450639b31dd551b6e4f9707502a35e9f2d57b
parent1507f21caf8eb4a5881299faf2e6eb00e348e7f3 (diff)
* node
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs52
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs32
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs1
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs121
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs26
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta (renamed from Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta)2
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs37
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/README.txt11
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.pngbin0 -> 18297 bytes
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta88
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.pngbin0 -> 18346 bytes
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta88
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta (renamed from Erika/Assets/WorkflowGraphs/README.txt.meta)5
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs (renamed from Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs)3
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta (renamed from Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta)2
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs58
-rw-r--r--Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta (renamed from Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta)2
-rw-r--r--Erika/Assets/WorkflowGraphs/README.txt1
-rw-r--r--Erika/Assets/WorkflowGraphs/Scripts.meta8
-rw-r--r--Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs23
-rw-r--r--Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta11
-rw-r--r--Erika/Assets/WorkflowGraphs/Skill.asset14
-rw-r--r--Erika/Assets/WorkflowGraphs/Skill.asset.meta8
-rw-r--r--Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset6
-rw-r--r--Other/NodeEditorExamples/Docs/xNodeEditor.xlsxbin410203 -> 526721 bytes
-rw-r--r--Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsxbin0 -> 165 bytes
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
new file mode 100644
index 00000000..36c0ce93
--- /dev/null
+++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png
Binary files differ
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
new file mode 100644
index 00000000..538cc9fa
--- /dev/null
+++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png
Binary files differ
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
index c520eb30..c49127ec 100644
--- a/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx
+++ b/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx
Binary files differ
diff --git a/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx
new file mode 100644
index 00000000..6e8f159e
--- /dev/null
+++ b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx
Binary files differ