From 07384a387b84ee36b92a14e4db6080d7afe9f4b7 Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Tue, 9 Aug 2022 19:09:27 +0800 Subject: [PATCH 1/3] feature:start building comment block --- TNode/Samples/New HelloGraph.asset | 147 +++++------------- TNode/Samples/New HelloGraph.asset.meta | 2 +- TNode/TNodeCore/Editor/Binding.meta | 3 + .../TNodeCore/Editor/Binding/IModelBinding.cs | 7 + .../Editor/Binding/IModelBinding.cs.meta | 3 + TNode/TNodeCore/Editor/CommentView.meta | 3 + .../Editor/CommentView/CommentView.cs | 29 ++++ .../Editor/CommentView/CommentView.cs.meta | 3 + TNode/TNodeCore/Editor/Models/Comment.cs | 8 + TNode/TNodeCore/Editor/Models/Comment.cs.meta | 3 + TNode/TNodeCore/Runtime/Models/Model.cs | 9 +- TNode/TNodeCore/Runtime/Models/NodeData.cs | 3 +- .../DefaultGraphBlackboardView.cs | 4 +- .../Editor/NodeGraphView/DataGraphView.cs | 22 ++- 14 files changed, 129 insertions(+), 117 deletions(-) create mode 100644 TNode/TNodeCore/Editor/Binding.meta create mode 100644 TNode/TNodeCore/Editor/Binding/IModelBinding.cs create mode 100644 TNode/TNodeCore/Editor/Binding/IModelBinding.cs.meta create mode 100644 TNode/TNodeCore/Editor/CommentView.meta create mode 100644 TNode/TNodeCore/Editor/CommentView/CommentView.cs create mode 100644 TNode/TNodeCore/Editor/CommentView/CommentView.cs.meta create mode 100644 TNode/TNodeCore/Editor/Models/Comment.cs create mode 100644 TNode/TNodeCore/Editor/Models/Comment.cs.meta diff --git a/TNode/Samples/New HelloGraph.asset b/TNode/Samples/New HelloGraph.asset index bf972ef..3d9051f 100644 --- a/TNode/Samples/New HelloGraph.asset +++ b/TNode/Samples/New HelloGraph.asset @@ -16,128 +16,71 @@ MonoBehaviour: - id: 0 - id: 1 - id: 2 - - id: 3 - - id: 4 - - id: 5 - - id: 6 - - id: 7 - nodeLinks: [] + nodeLinks: + - inPort: + portEntryName: A + nodeDataId: 3e72627f-af97-4056-b89c-04d4f2f127f5 + outPort: + portEntryName: Value + nodeDataId: 4414d05b-da96-465e-a593-2e3dcfceaf23 + - inPort: + portEntryName: B + nodeDataId: 3e72627f-af97-4056-b89c-04d4f2f127f5 + outPort: + portEntryName: Value + nodeDataId: 1a4fd419-5584-4d43-a8c3-bebcad63a337 blackboardData: - id: 8 + id: 3 sceneReference: - editorModels: - - id: 9 - graphViewData: - id: 10 + editorModels: [] + graphViewModel: + id: 4 references: version: 1 00000000: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} + type: {class: BlackboardDragNodeData, ns: TNodeCore.Runtime.Models, asm: NewAssembly} data: positionInView: serializedVersion: 2 - x: 1944 - y: 205 + x: 297 + y: 280 width: 0 height: 0 - id: 74136d91-e634-401b-8c99-3c2bb351cab2 - nodeName: AddNode + id: 4414d05b-da96-465e-a593-2e3dcfceaf23 + nodeName: entryPoint: 0 isTest: 0 + blackDragData: V3S.0 + isListElement: 1 00000001: type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} data: positionInView: serializedVersion: 2 - x: 2045 - y: 205 + x: 454 + y: 280 width: 0 height: 0 - id: 8bee0814-52ef-4068-bffb-58a786d73ec2 + id: 3e72627f-af97-4056-b89c-04d4f2f127f5 nodeName: AddNode entryPoint: 0 isTest: 0 00000002: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} - data: - positionInView: - serializedVersion: 2 - x: 2146 - y: 205 - width: 0 - height: 0 - id: 819d1689-d64d-41ca-a9ac-0e00d25806c0 - nodeName: AddNode - entryPoint: 0 - isTest: 0 - 00000003: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} - data: - positionInView: - serializedVersion: 2 - x: 2247 - y: 205 - width: 0 - height: 0 - id: b8495e41-8ec2-4015-8784-7a99c1003c6b - nodeName: AddNode - entryPoint: 0 - isTest: 0 - 00000004: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} - data: - positionInView: - serializedVersion: 2 - x: 2014 - y: 340 - width: 0 - height: 0 - id: 3f27f6fe-b2db-41f2-9b3f-5e5fc468e536 - nodeName: AddNode - entryPoint: 0 - isTest: 0 - 00000005: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} - data: - positionInView: - serializedVersion: 2 - x: 2130 - y: 340 - width: 0 - height: 0 - id: 6500c6c2-3551-4930-8338-afd02a49105b - nodeName: AddNode - entryPoint: 0 - isTest: 0 - 00000006: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} - data: - positionInView: - serializedVersion: 2 - x: 2247 - y: 340 - width: 0 - height: 0 - id: 002de40a-5ef5-4e99-8373-2628d189d6c9 - nodeName: AddNode - entryPoint: 0 - isTest: 0 - 00000007: type: {class: BlackboardDragNodeData, ns: TNodeCore.Runtime.Models, asm: NewAssembly} data: positionInView: serializedVersion: 2 - x: 1944.9998 - y: 475.8858 + x: 225 + y: 382 width: 0 height: 0 - id: 2f9adf6b-b40b-4fbd-9bd6-0d1ebb10992f + id: 1a4fd419-5584-4d43-a8c3-bebcad63a337 nodeName: entryPoint: 0 isTest: 0 - blackDragData: HelloGameObject - isListElement: 0 - 00000008: + blackDragData: V2S.0 + isListElement: 1 + 00000003: type: {class: HelloBlackboard, ns: TNode.Samples, asm: Assembly-CSharp} data: positionInView: @@ -146,26 +89,14 @@ MonoBehaviour: y: 0 width: 0 height: 0 - HelloString: hello - HelloGameObject: {fileID: 3675195758153116951, guid: 35a9f7ccd0ed7d744b85580016a0aab5, type: 3} + HelloString: + HelloGameObject: {fileID: 0} V3S: - {x: 0, y: 0, z: 0} V2S: - {x: 0, y: 0} - 00000009: - type: {class: PlacematData, ns: TNodeCore.Editor.Models, asm: NewAssembly} - data: - positionInView: - serializedVersion: 2 - x: 1903.9056 - y: 75.76817 - width: 500 - height: 500 - hostModels: [] - zOrder: 0 - title: Title - 0000000A: - type: {class: GraphViewData, ns: TNode.TNodeCore.Editor.Models, asm: NewAssembly} + 00000004: + type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: NewAssembly} data: positionInView: serializedVersion: 2 @@ -173,6 +104,6 @@ MonoBehaviour: y: 0 width: 0 height: 0 - persistScale: 0.8695652 - persistOffset: {x: -878, y: -29} + persistScale: 0.57175326 + persistOffset: {x: 343, y: 15} isBlackboardOn: 1 diff --git a/TNode/Samples/New HelloGraph.asset.meta b/TNode/Samples/New HelloGraph.asset.meta index e631b0a..7a32317 100644 --- a/TNode/Samples/New HelloGraph.asset.meta +++ b/TNode/Samples/New HelloGraph.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 490933fc590be444780d73cd9f777ed4 +guid: f55ebad0b05015a4f873ac78896d95d3 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/TNode/TNodeCore/Editor/Binding.meta b/TNode/TNodeCore/Editor/Binding.meta new file mode 100644 index 0000000..2ffcc8b --- /dev/null +++ b/TNode/TNodeCore/Editor/Binding.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 919363d9cb9c43a1a14fb12abc76a53b +timeCreated: 1660042822 \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Binding/IModelBinding.cs b/TNode/TNodeCore/Editor/Binding/IModelBinding.cs new file mode 100644 index 0000000..90527cd --- /dev/null +++ b/TNode/TNodeCore/Editor/Binding/IModelBinding.cs @@ -0,0 +1,7 @@ +namespace TNode.TNodeCore.Editor.Binding{ + public interface IModelBinding{ + public T Data{ get; } + public void Bind(T data); + public void OnChange(); + } +} \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Binding/IModelBinding.cs.meta b/TNode/TNodeCore/Editor/Binding/IModelBinding.cs.meta new file mode 100644 index 0000000..a15bdb6 --- /dev/null +++ b/TNode/TNodeCore/Editor/Binding/IModelBinding.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c25080540d844798a8c71e2b8feadf93 +timeCreated: 1660042832 \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/CommentView.meta b/TNode/TNodeCore/Editor/CommentView.meta new file mode 100644 index 0000000..d18e2bf --- /dev/null +++ b/TNode/TNodeCore/Editor/CommentView.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a5166d364fc64b82bce9580b4411c83e +timeCreated: 1660042541 \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/CommentView/CommentView.cs b/TNode/TNodeCore/Editor/CommentView/CommentView.cs new file mode 100644 index 0000000..a9a9a9a --- /dev/null +++ b/TNode/TNodeCore/Editor/CommentView/CommentView.cs @@ -0,0 +1,29 @@ +using TNode.TNodeCore.Editor.Binding; +using TNode.TNodeCore.Editor.Models; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace TNode.TNodeCore.Editor.CommentView{ + public class CommentView:GraphElement,IModelBinding{ + public Comment Data => _data; + private Comment _data; + public void Bind(Comment data){ + _data = data; + OnChange(); + } + + public CommentView(){ + var txtField = new TextField(); + this.Add(txtField); + txtField.RegisterValueChangedCallback(evt => { + if (_data != null){ + _data.CommentText = evt.newValue; + } + }); + } + public void OnChange(){ + var str = this._data.CommentText; + this.Q().value = str; + } + } +} \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/CommentView/CommentView.cs.meta b/TNode/TNodeCore/Editor/CommentView/CommentView.cs.meta new file mode 100644 index 0000000..a7e079d --- /dev/null +++ b/TNode/TNodeCore/Editor/CommentView/CommentView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e0f3542295fd4138967335f3ce44b5f2 +timeCreated: 1660042529 \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Models/Comment.cs b/TNode/TNodeCore/Editor/Models/Comment.cs new file mode 100644 index 0000000..c0b6854 --- /dev/null +++ b/TNode/TNodeCore/Editor/Models/Comment.cs @@ -0,0 +1,8 @@ +using TNodeCore.Runtime.Models; + +namespace TNode.TNodeCore.Editor.Models{ + public class Comment:EditorModel{ + public Model CommentedModel; + public string CommentText; + } +} \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Models/Comment.cs.meta b/TNode/TNodeCore/Editor/Models/Comment.cs.meta new file mode 100644 index 0000000..be2bc3c --- /dev/null +++ b/TNode/TNodeCore/Editor/Models/Comment.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7a79224e74245789ccaa833d12b833d +timeCreated: 1660041914 \ No newline at end of file diff --git a/TNode/TNodeCore/Runtime/Models/Model.cs b/TNode/TNodeCore/Runtime/Models/Model.cs index 6571aa0..429daa8 100644 --- a/TNode/TNodeCore/Runtime/Models/Model.cs +++ b/TNode/TNodeCore/Runtime/Models/Model.cs @@ -10,10 +10,17 @@ namespace TNodeCore.Runtime.Models{ [HideInBlackboard] public Rect positionInView; #endif - + [DisableOnInspector] + public string id; + [NonSerialized] + private int _fastAccessId=0; public object Clone(){ var memberwiseClone = this.MemberwiseClone(); return memberwiseClone; } + /// + /// Record and map the node by a string is cost.converted it to an integer to speed the process. + /// + public int FastAccessId => _fastAccessId==0?_fastAccessId=GetHashCode():_fastAccessId; } } \ No newline at end of file diff --git a/TNode/TNodeCore/Runtime/Models/NodeData.cs b/TNode/TNodeCore/Runtime/Models/NodeData.cs index f685a13..f286180 100644 --- a/TNode/TNodeCore/Runtime/Models/NodeData.cs +++ b/TNode/TNodeCore/Runtime/Models/NodeData.cs @@ -18,8 +18,7 @@ namespace TNodeCore.Runtime.Models{ //Object Registration } - [DisableOnInspector] - public string id; + public string nodeName; public bool entryPoint; diff --git a/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs b/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs index 6f5a3f2..ed707bb 100644 --- a/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs +++ b/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs @@ -86,7 +86,7 @@ namespace TNode.TNodeGraphViewImpl.Editor.GraphBlackboard{ private static void CreateBlackboardDataEntryForListItem(FieldInfo field, SerializedObject serializedObject, bool isRuntimeGraph, BlackboardSection blackboardSection, int index){ - var property = serializedObject.FindProperty("model"); + var property = serializedObject.FindProperty("data"); property = property.FindPropertyRelative(field.Name).GetArrayElementAtIndex(index); BlackboardDataEntry entry = new BlackboardDataEntry(field.FieldType){ @@ -112,7 +112,7 @@ namespace TNode.TNodeGraphViewImpl.Editor.GraphBlackboard{ var foldoutData = new Foldout{ }; var drawer = - new GraphBlackboardPropertyField(serializedObject.FindProperty("model").FindPropertyRelative(field.Name), + new GraphBlackboardPropertyField(serializedObject.FindProperty("data").FindPropertyRelative(field.Name), isRuntimeGraph); drawer.Bind(serializedObject); foldoutData.Add(drawer); diff --git a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs index 93462a0..fcf6b38 100644 --- a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs +++ b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs @@ -211,9 +211,26 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ AddPlacemat(placematData); }); + if (this.selection.Any()){ + evt.menu.AppendAction("Comment", dma => { + BuildCommentForSelected(); + }); + evt.menu.AppendAction("Delete", dma => { + DeleteSelected(); + }); + + } }); } + private void BuildCommentForSelected(){ + throw new NotImplementedException(); + } + + private void DeleteSelected(){ + throw new NotImplementedException(); + } + private void AddPlacemat(PlacematModel model){ _data.EditorModels.Add(model); } @@ -294,7 +311,9 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ text = "Run Once" }; runButton.RegisterCallback(evt => { + Debug.Log(IsRuntimeGraph); if (IsRuntimeGraph){ + _runtimeGraph.TraverseAll(); AfterGraphResolved?.Invoke(); } @@ -379,10 +398,7 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ ClearAll(); LoadPersistentGraphViewData(); - - if (_nodeDict == null) throw new ArgumentNullException(nameof(_nodeDict)); - foreach (var dataNode in _data.NodeDictionary.Values){ if(dataNode==null) continue; From b8494278cf0e8a88a45af86337eaf6e939defaef Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Wed, 10 Aug 2022 10:28:21 +0800 Subject: [PATCH 2/3] feature:Add a comment block for nodes --- TNode/Samples/New HelloGraph.asset | 46 ++++++++++++------- TNode/TNodeCore/Runtime/Models/NodeData.cs | 3 ++ .../Editor/NodeGraphView/DataGraphView.cs | 36 ++++++++++++++- 3 files changed, 68 insertions(+), 17 deletions(-) diff --git a/TNode/Samples/New HelloGraph.asset b/TNode/Samples/New HelloGraph.asset index 3d9051f..f699d86 100644 --- a/TNode/Samples/New HelloGraph.asset +++ b/TNode/Samples/New HelloGraph.asset @@ -32,9 +32,10 @@ MonoBehaviour: blackboardData: id: 3 sceneReference: - editorModels: [] + editorModels: + - id: 4 graphViewModel: - id: 4 + id: 5 references: version: 1 00000000: @@ -53,33 +54,33 @@ MonoBehaviour: blackDragData: V3S.0 isListElement: 1 00000001: - type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} + type: {class: BlackboardDragNodeData, ns: TNodeCore.Runtime.Models, asm: NewAssembly} data: positionInView: serializedVersion: 2 - x: 454 - y: 280 + x: 225 + y: 382 width: 0 height: 0 - id: 3e72627f-af97-4056-b89c-04d4f2f127f5 - nodeName: AddNode + id: 1a4fd419-5584-4d43-a8c3-bebcad63a337 + nodeName: entryPoint: 0 isTest: 0 + blackDragData: V2S.0 + isListElement: 1 00000002: - type: {class: BlackboardDragNodeData, ns: TNodeCore.Runtime.Models, asm: NewAssembly} + type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} data: positionInView: serializedVersion: 2 - x: 225 - y: 382 + x: 488 + y: 280 width: 0 height: 0 - id: 1a4fd419-5584-4d43-a8c3-bebcad63a337 - nodeName: + id: 3e72627f-af97-4056-b89c-04d4f2f127f5 + nodeName: AddNode entryPoint: 0 isTest: 0 - blackDragData: V2S.0 - isListElement: 1 00000003: type: {class: HelloBlackboard, ns: TNode.Samples, asm: Assembly-CSharp} data: @@ -89,6 +90,7 @@ MonoBehaviour: y: 0 width: 0 height: 0 + id: HelloString: HelloGameObject: {fileID: 0} V3S: @@ -96,6 +98,17 @@ MonoBehaviour: V2S: - {x: 0, y: 0} 00000004: + type: {class: Comment, ns: TNode.TNodeCore.Editor.Models, asm: NewAssembly} + data: + positionInView: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + id: + CommentText: + 00000005: type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: NewAssembly} data: positionInView: @@ -104,6 +117,7 @@ MonoBehaviour: y: 0 width: 0 height: 0 - persistScale: 0.57175326 - persistOffset: {x: 343, y: 15} + id: + persistScale: 1 + persistOffset: {x: 114, y: -155} isBlackboardOn: 1 diff --git a/TNode/TNodeCore/Runtime/Models/NodeData.cs b/TNode/TNodeCore/Runtime/Models/NodeData.cs index f286180..b59c9e8 100644 --- a/TNode/TNodeCore/Runtime/Models/NodeData.cs +++ b/TNode/TNodeCore/Runtime/Models/NodeData.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using TNodeCore.Runtime.Attributes; using UnityEngine; @@ -39,4 +40,6 @@ namespace TNodeCore.Runtime.Models{ } + + } \ No newline at end of file diff --git a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs index fcf6b38..d374c97 100644 --- a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs +++ b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Reflection; using System.Threading.Tasks; using TNode.TNodeCore.Editor.Blackboard; +using TNode.TNodeCore.Editor.CommentView; using TNode.TNodeCore.Editor.EditorPersistence; using TNode.TNodeCore.Editor.Models; using TNode.TNodeGraphViewImpl.Editor.Cache; @@ -23,6 +24,7 @@ using TNodeCore.Runtime.RuntimeCache; using UnityEditor; using UnityEditor.Experimental.GraphView; +using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; using BlackboardField = TNode.TNodeGraphViewImpl.Editor.GraphBlackboard.BlackboardField; @@ -43,6 +45,8 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ private IBlackboardView _blackboard; private bool _loaded; private GraphViewModel _graphViewModel; + private List _comments; + public T Data{ get{ return _data; } set{ @@ -224,7 +228,16 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ } private void BuildCommentForSelected(){ - throw new NotImplementedException(); + var selection = this.selection.OfType().ToList(); + foreach (var baseNodeView in selection){ + var comment = new CommentView(); + comment.Bind(new Comment(){ + + }); + ((GraphElement)baseNodeView).Add(comment); + comment.Data.CommentedModel = baseNodeView.GetNodeData(); + this._data.EditorModels.Add(comment.Data); + } } private void DeleteSelected(){ @@ -440,6 +453,16 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ res.PlacematModel = placemat; } + + var comments = _data.EditorModels.OfType(); + foreach (var comment in comments){ + var res = new CommentView(); + res.Bind(comment); + var node = _nodeDict[comment.CommentedModel.id]; + if (node != null){ + node.Add(res); + } + } _nodeDict.Clear(); } @@ -564,12 +587,21 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ private void SaveEditorModels(){ var placemats = placematContainer.Placemats.ToList(); + var comments = this.Query().ToList(); Debug.Log(placemats.Count); foreach (var placemat in placemats){ if (placemat is PlacematView placematView){ _data.EditorModels.Add(placematView.PlacematModel); } } + foreach (var commentView in comments){ + _data.EditorModels.Add(commentView.Data); + } + } + + public List Comments{ + get => _comments; + set => _comments = value; } private void SaveBlackboard(){ @@ -781,6 +813,8 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ } + + public class DataChangedEventArgs{ public DataChangedEventArgs(T data){ NewData = data; From 1ae31eb05791d39e757dfbde3fe333798bbb9324 Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Wed, 10 Aug 2022 11:36:44 +0800 Subject: [PATCH 3/3] feature:add a delete button for comment --- README.md | 5 ++--- TNode/Samples/New HelloGraph.asset | 16 ++++++++------ .../Editor/CommentView/CommentView.cs | 22 ++++++++++++++++++- TNode/TNodeCore/Editor/Models/Comment.cs | 2 ++ .../Editor/Resources/CommentView.uss | 6 +++++ .../Editor/Resources/CommentView.uss.meta | 3 +++ .../GraphEditorCreator/GraphEditorCreator.cs | 1 - TNode/TNodeCore/Runtime/Models/Model.cs | 1 + .../DefaultGraphBlackboardView.cs | 1 + 9 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 TNode/TNodeCore/Editor/Resources/CommentView.uss create mode 100644 TNode/TNodeCore/Editor/Resources/CommentView.uss.meta diff --git a/README.md b/README.md index c986e22..887a729 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,10 @@ the main goal of the repo is to make graph creation easier and more intuitive. * Scene object nodes hold scene objects like blackboard # Some to-dos -* Port connectivity of two types have implicit conversion -* Node placemat * Vertical node * A universal merger handle multiple input -* Support static graph data traversal +* Support graph data traversal like FSM +* Conditional edge # Install & Usage Right now this lib is still under development. diff --git a/TNode/Samples/New HelloGraph.asset b/TNode/Samples/New HelloGraph.asset index f699d86..0ea0f1e 100644 --- a/TNode/Samples/New HelloGraph.asset +++ b/TNode/Samples/New HelloGraph.asset @@ -43,8 +43,8 @@ MonoBehaviour: data: positionInView: serializedVersion: 2 - x: 297 - y: 280 + x: 519 + y: 361 width: 0 height: 0 id: 4414d05b-da96-465e-a593-2e3dcfceaf23 @@ -58,8 +58,8 @@ MonoBehaviour: data: positionInView: serializedVersion: 2 - x: 225 - y: 382 + x: 519 + y: 443 width: 0 height: 0 id: 1a4fd419-5584-4d43-a8c3-bebcad63a337 @@ -73,8 +73,8 @@ MonoBehaviour: data: positionInView: serializedVersion: 2 - x: 488 - y: 280 + x: 630 + y: 361 width: 0 height: 0 id: 3e72627f-af97-4056-b89c-04d4f2f127f5 @@ -107,6 +107,8 @@ MonoBehaviour: width: 0 height: 0 id: + CommentedModel: + id: 2 CommentText: 00000005: type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: NewAssembly} @@ -119,5 +121,5 @@ MonoBehaviour: height: 0 id: persistScale: 1 - persistOffset: {x: 114, y: -155} + persistOffset: {x: -302, y: -93} isBlackboardOn: 1 diff --git a/TNode/TNodeCore/Editor/CommentView/CommentView.cs b/TNode/TNodeCore/Editor/CommentView/CommentView.cs index a9a9a9a..d2bc620 100644 --- a/TNode/TNodeCore/Editor/CommentView/CommentView.cs +++ b/TNode/TNodeCore/Editor/CommentView/CommentView.cs @@ -1,6 +1,9 @@ -using TNode.TNodeCore.Editor.Binding; +using System; +using TNode.TNodeCore.Editor.Binding; using TNode.TNodeCore.Editor.Models; +using TNodeCore.Editor.NodeGraphView; using UnityEditor.Experimental.GraphView; +using UnityEngine; using UnityEngine.UIElements; namespace TNode.TNodeCore.Editor.CommentView{ @@ -14,13 +17,30 @@ namespace TNode.TNodeCore.Editor.CommentView{ public CommentView(){ var txtField = new TextField(); + var btn = new Button(() => { + var graphElement = (Node) this.GetFirstOfType(); + graphElement.Remove(this); + }); + btn.text = "-"; + this.Add(btn); this.Add(txtField); txtField.RegisterValueChangedCallback(evt => { if (_data != null){ _data.CommentText = evt.newValue; } }); + + + + capabilities |= Capabilities.Collapsible | Capabilities.Deletable|Capabilities.Selectable; + + styleSheets.Add(Resources.Load("CommentView")); + } + + private void ClickComment(){ + } + public void OnChange(){ var str = this._data.CommentText; this.Q().value = str; diff --git a/TNode/TNodeCore/Editor/Models/Comment.cs b/TNode/TNodeCore/Editor/Models/Comment.cs index c0b6854..8143709 100644 --- a/TNode/TNodeCore/Editor/Models/Comment.cs +++ b/TNode/TNodeCore/Editor/Models/Comment.cs @@ -1,7 +1,9 @@ using TNodeCore.Runtime.Models; +using UnityEngine; namespace TNode.TNodeCore.Editor.Models{ public class Comment:EditorModel{ + [SerializeReference] public Model CommentedModel; public string CommentText; } diff --git a/TNode/TNodeCore/Editor/Resources/CommentView.uss b/TNode/TNodeCore/Editor/Resources/CommentView.uss new file mode 100644 index 0000000..7501cb0 --- /dev/null +++ b/TNode/TNodeCore/Editor/Resources/CommentView.uss @@ -0,0 +1,6 @@ +TextField{ + min-width: 400px; +} +{ + flex-direction: row; +} \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Resources/CommentView.uss.meta b/TNode/TNodeCore/Editor/Resources/CommentView.uss.meta new file mode 100644 index 0000000..65b376b --- /dev/null +++ b/TNode/TNodeCore/Editor/Resources/CommentView.uss.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 03185df2d8c7459fb302d053876477b6 +timeCreated: 1660101516 \ No newline at end of file diff --git a/TNode/TNodeCore/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs b/TNode/TNodeCore/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs index aadb174..679ce25 100644 --- a/TNode/TNodeCore/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs +++ b/TNode/TNodeCore/Editor/Tools/GraphEditorCreator/GraphEditorCreator.cs @@ -146,7 +146,6 @@ namespace TNodeCore.Editor.Tools.GraphEditorCreator{ //Create an NodeAttribute Editor Data Instance for the new graph editor var graphEditorData = ScriptableObject.CreateInstance(); graphEditorData.name = editorName; - VisualTreeAsset defaultEditorTree = Resources.Load("GraphEditor"); EditorUtility.SetDirty(graphEditorData); diff --git a/TNode/TNodeCore/Runtime/Models/Model.cs b/TNode/TNodeCore/Runtime/Models/Model.cs index 429daa8..8f8a216 100644 --- a/TNode/TNodeCore/Runtime/Models/Model.cs +++ b/TNode/TNodeCore/Runtime/Models/Model.cs @@ -11,6 +11,7 @@ namespace TNodeCore.Runtime.Models{ public Rect positionInView; #endif [DisableOnInspector] + [HideInBlackboard] public string id; [NonSerialized] private int _fastAccessId=0; diff --git a/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs b/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs index ed707bb..d460b0c 100644 --- a/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs +++ b/TNode/TNodeGraphViewImpl/Editor/GraphBlackboard/DefaultGraphBlackboardView.cs @@ -35,6 +35,7 @@ namespace TNode.TNodeGraphViewImpl.Editor.GraphBlackboard{ foreach (var field in data.GetType() .GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)){ if(field.GetCustomAttributes(typeof(HideInBlackboard)).Count()!=0) continue; + //if the field is MonoBehaviour,add a property field for blackboard //skip if the field is a list or Ilist if (!typeof(IList).IsAssignableFrom(field.FieldType)&&!field.FieldType.IsArray){