From 0d3d0e09ddcd5f545a40e652ca854e05db2bf15a Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Sat, 25 Jun 2022 15:29:05 +0800 Subject: [PATCH] brave new world --- TNode/Attribute/InputPortAttribute.cs | 13 +++-- TNode/Attribute/PortAttribute.cs | 28 +++++++++++ TNode/Attribute/PortAttribute.cs.meta | 3 ++ TNode/BaseModels/Interfaces.meta | 3 ++ .../{ => Interfaces}/IEditorOnlyModel.cs | 0 .../{ => Interfaces}/IEditorOnlyModel.cs.meta | 0 TNode/BaseModels/{ => Interfaces}/IModel.cs | 0 .../{ => Interfaces}/IModel.cs.meta | 0 TNode/Editor/Inspector.meta | 3 ++ TNode/Editor/Inspector/INodeDataBinding.cs | 22 +++++++++ .../Editor/Inspector/INodeDataBinding.cs.meta | 3 ++ TNode/Editor/Inspector/InspectorItem.cs | 10 ++++ TNode/Editor/Inspector/InspectorItem.cs.meta | 3 ++ .../{BaseViews => Inspector}/NodeInspector.cs | 15 ++++-- .../NodeInspector.cs.meta | 0 TNode/Editor/Inspector/TinyInspector.cs | 8 ++++ TNode/Editor/Inspector/TinyInspector.cs.meta | 3 ++ .../ScriptTemplates/NewGraphEditor.cs.txt | 14 +++++- .../GraphEditorCreator/GraphEditorCreator.cs | 48 +++++++++++++++++-- TNode/Models/GraphData.cs | 1 - TNode/Models/NodeData.cs | 14 ++++-- TNode/TNodeSample/NodeDataTest.cs | 4 +- 22 files changed, 175 insertions(+), 20 deletions(-) create mode 100644 TNode/Attribute/PortAttribute.cs create mode 100644 TNode/Attribute/PortAttribute.cs.meta create mode 100644 TNode/BaseModels/Interfaces.meta rename TNode/BaseModels/{ => Interfaces}/IEditorOnlyModel.cs (100%) rename TNode/BaseModels/{ => Interfaces}/IEditorOnlyModel.cs.meta (100%) rename TNode/BaseModels/{ => Interfaces}/IModel.cs (100%) rename TNode/BaseModels/{ => Interfaces}/IModel.cs.meta (100%) create mode 100644 TNode/Editor/Inspector.meta create mode 100644 TNode/Editor/Inspector/INodeDataBinding.cs create mode 100644 TNode/Editor/Inspector/INodeDataBinding.cs.meta create mode 100644 TNode/Editor/Inspector/InspectorItem.cs create mode 100644 TNode/Editor/Inspector/InspectorItem.cs.meta rename TNode/Editor/{BaseViews => Inspector}/NodeInspector.cs (54%) rename TNode/Editor/{BaseViews => Inspector}/NodeInspector.cs.meta (100%) create mode 100644 TNode/Editor/Inspector/TinyInspector.cs create mode 100644 TNode/Editor/Inspector/TinyInspector.cs.meta diff --git a/TNode/Attribute/InputPortAttribute.cs b/TNode/Attribute/InputPortAttribute.cs index e57cc1b..10905d3 100644 --- a/TNode/Attribute/InputPortAttribute.cs +++ b/TNode/Attribute/InputPortAttribute.cs @@ -1,12 +1,17 @@ using System; using JetBrains.Annotations; +using TNode.Models; using UnityEditor.Experimental.GraphView; namespace TNode.Attribute{ [MeansImplicitUse] - public class InputPortAttribute : System.Attribute{ - public Type NodeLinkType; - public string PortAccepted; - public Port.Capacity Capacity; + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true)] + public class InputPortAttribute : PortAttribute{ + public InputPortAttribute(string portName, Type nodeLinkType, Port.Capacity capacity, string portAccepted = "*") : base(portName, nodeLinkType, capacity, portAccepted){ + } + public InputPortAttribute(Type nodeLinkType, Port.Capacity capacity, string portAccepted="*") : base(nodeLinkType, capacity, portAccepted){ + } + public InputPortAttribute(string portName="*",string portAccepted = "*") :base(portName, typeof(NodeLink),Port.Capacity.Multi,portAccepted){ + } } } \ No newline at end of file diff --git a/TNode/Attribute/PortAttribute.cs b/TNode/Attribute/PortAttribute.cs new file mode 100644 index 0000000..8399fe8 --- /dev/null +++ b/TNode/Attribute/PortAttribute.cs @@ -0,0 +1,28 @@ +using System; +using JetBrains.Annotations; +using UnityEditor.Experimental.GraphView; + +namespace TNode.Attribute{ + [MeansImplicitUse] + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true)] + + public class PortAttribute:System.Attribute{ + public string PortName; + public string PortAccepted; + public Type NodeLinkType; + public Port.Capacity Capacity; + + public PortAttribute(string portName, Type nodeLinkType, Port.Capacity capacity,string portAccepted="*"){ + PortName = portName; + PortAccepted = portAccepted; + NodeLinkType = nodeLinkType; + Capacity = capacity; + } + //Auto generate port name via variable use this attribute + public PortAttribute(Type nodeLinkType, Port.Capacity capacity, string portAccepted = "*"){ + PortAccepted = portAccepted; + NodeLinkType = nodeLinkType; + Capacity = capacity; + } + } +} \ No newline at end of file diff --git a/TNode/Attribute/PortAttribute.cs.meta b/TNode/Attribute/PortAttribute.cs.meta new file mode 100644 index 0000000..b1d97b2 --- /dev/null +++ b/TNode/Attribute/PortAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3c8e45090fd24360a1c056f58c54e021 +timeCreated: 1656123678 \ No newline at end of file diff --git a/TNode/BaseModels/Interfaces.meta b/TNode/BaseModels/Interfaces.meta new file mode 100644 index 0000000..9f91538 --- /dev/null +++ b/TNode/BaseModels/Interfaces.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a3385746bf2c4f7699ac027dcb138a53 +timeCreated: 1656129728 \ No newline at end of file diff --git a/TNode/BaseModels/IEditorOnlyModel.cs b/TNode/BaseModels/Interfaces/IEditorOnlyModel.cs similarity index 100% rename from TNode/BaseModels/IEditorOnlyModel.cs rename to TNode/BaseModels/Interfaces/IEditorOnlyModel.cs diff --git a/TNode/BaseModels/IEditorOnlyModel.cs.meta b/TNode/BaseModels/Interfaces/IEditorOnlyModel.cs.meta similarity index 100% rename from TNode/BaseModels/IEditorOnlyModel.cs.meta rename to TNode/BaseModels/Interfaces/IEditorOnlyModel.cs.meta diff --git a/TNode/BaseModels/IModel.cs b/TNode/BaseModels/Interfaces/IModel.cs similarity index 100% rename from TNode/BaseModels/IModel.cs rename to TNode/BaseModels/Interfaces/IModel.cs diff --git a/TNode/BaseModels/IModel.cs.meta b/TNode/BaseModels/Interfaces/IModel.cs.meta similarity index 100% rename from TNode/BaseModels/IModel.cs.meta rename to TNode/BaseModels/Interfaces/IModel.cs.meta diff --git a/TNode/Editor/Inspector.meta b/TNode/Editor/Inspector.meta new file mode 100644 index 0000000..8303405 --- /dev/null +++ b/TNode/Editor/Inspector.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 71a4cdef7fcc4595bbca70ca16e06e9d +timeCreated: 1656126162 \ No newline at end of file diff --git a/TNode/Editor/Inspector/INodeDataBinding.cs b/TNode/Editor/Inspector/INodeDataBinding.cs new file mode 100644 index 0000000..563de65 --- /dev/null +++ b/TNode/Editor/Inspector/INodeDataBinding.cs @@ -0,0 +1,22 @@ +using TNode.Models; +using UnityEngine; + +namespace TNode.Editor.Inspector{ + public interface INodeDataBinding{ + protected T GetValue(){ + + var fieldInfo = typeof(T).GetField(BindingPath, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); + //check field type + if (fieldInfo != null && fieldInfo.FieldType == typeof(T)){ + return (T)fieldInfo.GetValue(BindingNodeData); + } + else{ + Debug.LogError("Wrong Type for current node data"); + } + return default; + } + public string BindingPath{ get; set; } + public NodeData BindingNodeData{ get; set; } + public T Value => GetValue(); + } +} \ No newline at end of file diff --git a/TNode/Editor/Inspector/INodeDataBinding.cs.meta b/TNode/Editor/Inspector/INodeDataBinding.cs.meta new file mode 100644 index 0000000..c218483 --- /dev/null +++ b/TNode/Editor/Inspector/INodeDataBinding.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b06ba4ccd201400cbabfa7b6ee092cb2 +timeCreated: 1656137782 \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorItem.cs b/TNode/Editor/Inspector/InspectorItem.cs new file mode 100644 index 0000000..a3c9077 --- /dev/null +++ b/TNode/Editor/Inspector/InspectorItem.cs @@ -0,0 +1,10 @@ +using TNode.Models; +using UnityEngine; +using UnityEngine.UIElements; + +namespace TNode.Editor.Inspector{ + public abstract class InspectorItem:VisualElement,INodeDataBinding{ + public string BindingPath{ get; set; } + public NodeData BindingNodeData{ get; set; } + } +} \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorItem.cs.meta b/TNode/Editor/Inspector/InspectorItem.cs.meta new file mode 100644 index 0000000..9008d3f --- /dev/null +++ b/TNode/Editor/Inspector/InspectorItem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 82902f281e4642f2be8b742866d38839 +timeCreated: 1656126272 \ No newline at end of file diff --git a/TNode/Editor/BaseViews/NodeInspector.cs b/TNode/Editor/Inspector/NodeInspector.cs similarity index 54% rename from TNode/Editor/BaseViews/NodeInspector.cs rename to TNode/Editor/Inspector/NodeInspector.cs index 81936d1..80eb3dd 100644 --- a/TNode/Editor/BaseViews/NodeInspector.cs +++ b/TNode/Editor/Inspector/NodeInspector.cs @@ -1,8 +1,8 @@ -using TNode.Models; -using UnityEditor.Experimental.GraphView; +using TNode.BaseViews; +using TNode.Models; -namespace TNode.BaseViews{ - public class NodeInspector:SimpleGraphSubWindow{ +namespace TNode.Editor.BaseViews{ + public class NodeInspector:SimpleGraphSubWindow{ private NodeData _data; public NodeData Data{ @@ -15,8 +15,13 @@ namespace TNode.BaseViews{ private void UpdateData(){ if (_data != null){ - + RefreshInspector(); } } + + private void RefreshInspector(){ + + } + } } \ No newline at end of file diff --git a/TNode/Editor/BaseViews/NodeInspector.cs.meta b/TNode/Editor/Inspector/NodeInspector.cs.meta similarity index 100% rename from TNode/Editor/BaseViews/NodeInspector.cs.meta rename to TNode/Editor/Inspector/NodeInspector.cs.meta diff --git a/TNode/Editor/Inspector/TinyInspector.cs b/TNode/Editor/Inspector/TinyInspector.cs new file mode 100644 index 0000000..7e28f58 --- /dev/null +++ b/TNode/Editor/Inspector/TinyInspector.cs @@ -0,0 +1,8 @@ +namespace TNode.Editor.Inspector{ + /// + /// Tiny Inspector item is a simple inspector inside a node view + /// + public class TinyInspector{ + + } +} \ No newline at end of file diff --git a/TNode/Editor/Inspector/TinyInspector.cs.meta b/TNode/Editor/Inspector/TinyInspector.cs.meta new file mode 100644 index 0000000..5944c38 --- /dev/null +++ b/TNode/Editor/Inspector/TinyInspector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7eeddeb28a5a475c85c85ceae3198778 +timeCreated: 1656142058 \ No newline at end of file diff --git a/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt index 6cb9b36..20018c0 100644 --- a/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt +++ b/TNode/Editor/Resources/ScriptTemplates/NewGraphEditor.cs.txt @@ -6,5 +6,17 @@ using UnityEngine; using UnityEngine.UIElements; public class $EditorClassName$ : GraphEditor<$GraphClassName$>{ - + [OnOpenAsset] + public static bool OnOpenAsset(int instanceID, int line){ + var graph = EditorUtility.InstanceIDToObject(instanceID) as $GraphClassName$; + if (graph != null) + { + $GraphClassName$ wnd = GetWindow<$EditorClassName$>(); + wnd.titleContent = new GUIContent("$GraphClassName$ Editor"); + wnd.CreateGUI(); + wnd._graphView.Data = graph; + return true; + } + return false; + } } \ No newline at end of file diff --git a/TNode/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs b/TNode/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs index 19af845..472a7cd 100644 --- a/TNode/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs +++ b/TNode/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs @@ -1,4 +1,5 @@ using System.IO; +using System.Text.RegularExpressions; using TNode.Editor.Model; using UnityEditor; using UnityEngine; @@ -14,6 +15,10 @@ namespace TNode.Editor.Tools.GraphEditorCreator{ [SerializeField] private VisualTreeAsset m_VisualTreeAsset = default; + private TextField _editorClassNameTextField; + private TextField _graphClassNameTextField; + private Button _createButton; + [MenuItem("Assets/Create/TNode/Create New Graph Editor")] [MenuItem("TNode/Create New Graph Editor")] public static void ShowExample() @@ -42,8 +47,43 @@ namespace TNode.Editor.Tools.GraphEditorCreator{ root.Add(labelFromUXML); //Register a callback when Create Button is clicked - Button createButton = root.Q