diff --git a/TNode/Editor/Cache/NodeEditorExtensions.cs b/TNode/Editor/Cache/NodeEditorExtensions.cs index 7f507d9..8e5fb14 100644 --- a/TNode/Editor/Cache/NodeEditorExtensions.cs +++ b/TNode/Editor/Cache/NodeEditorExtensions.cs @@ -45,5 +45,9 @@ namespace TNode.Cache{ var instance = Activator.CreateInstance(implementedType); return instance; } + public static bool HasSpecificType() where T : class{ + var implementedType = NodeEditorSingleton.Instance.FromGenericToSpecific[typeof(T)] as T; + return (T)implementedType!=null; + } } } \ No newline at end of file diff --git a/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs b/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs new file mode 100644 index 0000000..7386a4a --- /dev/null +++ b/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs @@ -0,0 +1,34 @@ +using System; +using TNode.Cache; +using TNode.Editor.Inspector.InspectorImplementation; +using UnityEditor; +using UnityEngine.UIElements; + +namespace TNode.Editor.Inspector{ + public class DefaultInspectorItemFactory{ + + public InspectorItem Create(){ + //Check type of T + var hasSpecificType = NodeEditorExtensions.HasSpecificType>(); + if (hasSpecificType){ + return NodeEditorExtensions.CreateInstance>(); + } + else{ + return DefaultInspectorItem(); + } + } + + public static InspectorItem DefaultInspectorItem(){ + DefaultInspectorItem item = new DefaultInspectorItem(); + if (typeof(string) == typeof(T)){ + item.FoldOut.Add(new TextField(){ + name = "StringTextField" + }); + } + + return item; + + } + } +} + \ No newline at end of file diff --git a/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs.meta b/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs.meta new file mode 100644 index 0000000..f9838bb --- /dev/null +++ b/TNode/Editor/Inspector/DefaultInspectorItemFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 83b9e37f79cf4a18b265e3e22e7e3ced +timeCreated: 1656142463 \ No newline at end of file diff --git a/TNode/Editor/Inspector/INodeDataBinding.cs b/TNode/Editor/Inspector/INodeDataBinding.cs index 563de65..99aa316 100644 --- a/TNode/Editor/Inspector/INodeDataBinding.cs +++ b/TNode/Editor/Inspector/INodeDataBinding.cs @@ -18,5 +18,9 @@ namespace TNode.Editor.Inspector{ public string BindingPath{ get; set; } public NodeData BindingNodeData{ get; set; } public T Value => GetValue(); + + public void OnBindingDataUpdate(){ + + } } } \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorImplementation.meta b/TNode/Editor/Inspector/InspectorImplementation.meta new file mode 100644 index 0000000..d8de6bd --- /dev/null +++ b/TNode/Editor/Inspector/InspectorImplementation.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4cdebd0430794d32918ba8c63d71d0cc +timeCreated: 1656142311 \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs b/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs new file mode 100644 index 0000000..ada5681 --- /dev/null +++ b/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs @@ -0,0 +1,16 @@ +using UnityEngine.UIElements; + +namespace TNode.Editor.Inspector.InspectorImplementation{ + public class DefaultInspectorItem:InspectorItem{ + public Foldout FoldOut; + public DefaultInspectorItem(){ + var foldout = new Foldout{ + text = "" + }; + this.Add(foldout); + OnValueChanged += () => { + foldout.text = this.BindingPath; + }; + } + } +} \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs.meta b/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs.meta new file mode 100644 index 0000000..c837e6d --- /dev/null +++ b/TNode/Editor/Inspector/InspectorImplementation/DefaultInspectorItem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6b4f88e6c094449280ba5e38cb508287 +timeCreated: 1656143219 \ No newline at end of file diff --git a/TNode/Editor/Inspector/InspectorItem.cs b/TNode/Editor/Inspector/InspectorItem.cs index a3c9077..f430620 100644 --- a/TNode/Editor/Inspector/InspectorItem.cs +++ b/TNode/Editor/Inspector/InspectorItem.cs @@ -4,7 +4,32 @@ using UnityEngine.UIElements; namespace TNode.Editor.Inspector{ public abstract class InspectorItem:VisualElement,INodeDataBinding{ - public string BindingPath{ get; set; } - public NodeData BindingNodeData{ get; set; } + private NodeData _bindingNodeData; + private string _bindingFieldName; + protected event System.Action OnValueChanged; + + public string BindingPath{ + get => _bindingFieldName; + set{ + _bindingFieldName = value; + if(_bindingFieldName!=null&&_bindingNodeData!=null){ + OnValueChanged?.Invoke(); + } + } + } + + public NodeData BindingNodeData{ + get => _bindingNodeData; + set{ + _bindingNodeData = value; + if(_bindingFieldName!=null&&_bindingNodeData!=null){ + OnValueChanged?.Invoke(); + } + + } + } + + + } } \ No newline at end of file diff --git a/TNode/Editor/Inspector/TinyInspector.cs b/TNode/Editor/Inspector/TinyInspector.cs deleted file mode 100644 index 7e28f58..0000000 --- a/TNode/Editor/Inspector/TinyInspector.cs +++ /dev/null @@ -1,8 +0,0 @@ -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/TinyInspectorItem.cs b/TNode/Editor/Inspector/TinyInspectorItem.cs new file mode 100644 index 0000000..89186c9 --- /dev/null +++ b/TNode/Editor/Inspector/TinyInspectorItem.cs @@ -0,0 +1,13 @@ +using TNode.Models; +using UnityEngine.UIElements; + +namespace TNode.Editor.Inspector{ + /// + /// Tiny Inspector item is a simple inspector item inside a node view ,it monitor node data + /// + /// + public class TinyInspectorItem:VisualElement,INodeDataBinding{ + public string BindingPath{ get; set; } + public NodeData BindingNodeData{ get; set; } + } +} \ No newline at end of file diff --git a/TNode/Editor/Inspector/TinyInspector.cs.meta b/TNode/Editor/Inspector/TinyInspectorItem.cs.meta similarity index 100% rename from TNode/Editor/Inspector/TinyInspector.cs.meta rename to TNode/Editor/Inspector/TinyInspectorItem.cs.meta