From 985f5e5638dd39e37f316ea5f64642b72581e926 Mon Sep 17 00:00:00 2001
From: taoria <445625470@qq.com>
Date: Thu, 18 Aug 2022 17:50:46 +0800
Subject: [PATCH] fix:add some test for TNode
---
Samples/New HelloGraph.asset | 139 +-----------------
TNodeCore/Runtime/Models/PortInfo.cs | 3 +
TNodeCore/Runtime/RuntimeNode.cs | 42 +++++-
Tests.meta => TNodeCore/Tests.meta | 0
TNodeCore/Tests/Editor.meta | 3 +
TNodeCore/Tests/Runtime.meta | 3 +
.../Editor/Cache/NodeEditorExtensions.cs | 2 +-
.../Editor/NodeGraphView/DataGraphView.cs | 13 +-
.../Editor/NodeViews/NodeView.cs | 23 ++-
TNodeGraphViewImpl/Tests.meta | 8 +
10 files changed, 87 insertions(+), 149 deletions(-)
rename Tests.meta => TNodeCore/Tests.meta (100%)
create mode 100644 TNodeCore/Tests/Editor.meta
create mode 100644 TNodeCore/Tests/Runtime.meta
create mode 100644 TNodeGraphViewImpl/Tests.meta
diff --git a/Samples/New HelloGraph.asset b/Samples/New HelloGraph.asset
index 9d75329..bf5255f 100644
--- a/Samples/New HelloGraph.asset
+++ b/Samples/New HelloGraph.asset
@@ -12,142 +12,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 2051a0adbd1ba974084a535dd06ab7d7, type: 3}
m_Name: New HelloGraph
m_EditorClassIdentifier:
- nodeList:
- - id: 0
- - id: 1
- - id: 2
- - id: 3
- nodeLinks:
- - inPort:
- portEntryName: A
- nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
- outPort:
- portEntryName: Value
- nodeDataId: ae519ad8-4bc8-46c5-a98a-dc95bc85b58a
- - inPort:
- portEntryName: A
- nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
- outPort:
- portEntryName: Value
- nodeDataId: 23526615-f15c-4bdf-96c2-38a57d30b10d
- - inPort:
- portEntryName: A
- nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
- outPort:
- portEntryName: Value
- nodeDataId: 06f5acb9-58d5-41b3-b7f5-bd90f7f9ab94
+ nodeList: []
+ nodeLinks: []
blackboardData:
- id: 4
+ id: 0
sceneReference:
- editorModels:
- - id: 5
+ editorModels: []
graphViewModel:
- id: 6
+ id: 0
references:
version: 1
00000000:
- type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
- data:
- positionInView:
- serializedVersion: 2
- x: -345
- y: -42
- width: 0
- height: 0
- id: 23526615-f15c-4bdf-96c2-38a57d30b10d
- nodeName:
- entryPoint: 0
- isTest: 0
- blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
- Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
- blackDragData: HelloGameObject
- isListElement: 0
- 00000001:
- type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
- data:
- positionInView:
- serializedVersion: 2
- x: -345
- y: -84
- width: 0
- height: 0
- id: ae519ad8-4bc8-46c5-a98a-dc95bc85b58a
- nodeName:
- entryPoint: 0
- isTest: 0
- blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
- Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
- blackDragData: HelloGameObject
- isListElement: 0
- 00000002:
- type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
- data:
- positionInView:
- serializedVersion: 2
- x: -345
- y: -126
- width: 0
- height: 0
- id: 06f5acb9-58d5-41b3-b7f5-bd90f7f9ab94
- nodeName:
- entryPoint: 0
- isTest: 0
- blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
- Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
- blackDragData: HelloGameObject
- isListElement: 0
- 00000003:
- type: {class: AddNode, ns: Samples, asm: Assembly-CSharp}
- data:
- positionInView:
- serializedVersion: 2
- x: -17
- y: -18
- width: 0
- height: 0
- id: f33d73da-40c5-4b3a-ace7-40105e3489b6
- nodeName: AddNode
- entryPoint: 0
- isTest: 0
- 00000004:
- type: {class: HelloBlackboard, ns: TNode.Samples, asm: Assembly-CSharp}
- data:
- positionInView:
- serializedVersion: 2
- x: 0
- y: 0
- width: 0
- height: 0
- id:
- HelloString:
- HelloGameObject: {fileID: 0}
- V3S:
- - {x: 0, y: 0, z: 0}
- V2S:
- - {x: 0, y: 0}
- 00000005:
- type: {class: PlacematModel, ns: TNode.TNodeCore.Editor.Models, asm: TNodeCore}
- data:
- positionInView:
- serializedVersion: 2
- x: 465
- y: -21
- width: 500
- height: 500
- id:
- hostModels: []
- zOrder: 0
- title: Title
- 00000006:
- type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: TNodeCore}
- data:
- positionInView:
- serializedVersion: 2
- x: 0
- y: 0
- width: 0
- height: 0
- id:
- persistScale: 1
- persistOffset: {x: 519, y: 347}
- isBlackboardOn: 1
+ type: {class: , ns: , asm: }
diff --git a/TNodeCore/Runtime/Models/PortInfo.cs b/TNodeCore/Runtime/Models/PortInfo.cs
index 1a11771..27bcd25 100644
--- a/TNodeCore/Runtime/Models/PortInfo.cs
+++ b/TNodeCore/Runtime/Models/PortInfo.cs
@@ -3,6 +3,9 @@
namespace TNodeCore.Runtime.Models{
[Serializable]
public class PortInfo{
+ ///
+ /// Port entry name is port's name ,not the portName of the port
+ ///
public string portEntryName;
public string nodeDataId;
}
diff --git a/TNodeCore/Runtime/RuntimeNode.cs b/TNodeCore/Runtime/RuntimeNode.cs
index 3062874..99da772 100644
--- a/TNodeCore/Runtime/RuntimeNode.cs
+++ b/TNodeCore/Runtime/RuntimeNode.cs
@@ -19,16 +19,48 @@ namespace TNodeCore.Runtime{
public void SetInput(string portName,object value){
var valueType = value.GetType();
- var portType = _portAccessors[portName].Type;
- if(portType!=valueType && !portType.IsAssignableFrom(valueType)){
- var res =RuntimeCache.RuntimeCache.Instance.GetConvertedValue(valueType, portType, value);
- _portAccessors[portName].SetValue(NodeData, res);
+ var portPath = portName.Split(':');
+ if (portPath.Length ==2){
+ portName = portPath[0];
+ int index = int.Parse(portPath[1]);
+ if(_portAccessors[portName].Type.IsArray){
+ if (_portAccessors[portName].GetValue(NodeData) is Array array)
+ array.SetValue(value, index);
+ }
+
+ if (_portAccessors[portName].Type.IsGenericType){
+ if (_portAccessors[portName].GetValue(NodeData) is IList list)
+ list[index] = value;
+ }
+
}
else{
- _portAccessors[portName].SetValue(NodeData,value);
+ var portType = _portAccessors[portName].Type;
+ if(portType!=valueType && !portType.IsAssignableFrom(valueType)){
+ var res =RuntimeCache.RuntimeCache.Instance.GetConvertedValue(valueType, portType, value);
+ _portAccessors[portName].SetValue(NodeData, res);
+ }
+ else{
+ _portAccessors[portName].SetValue(NodeData,value);
+ }
}
+
}
public object GetOutput(string portName){
+ var portPath = portName.Split(':');
+ if (portPath.Length == 2){
+ portName = portPath[0];
+ int index = int.Parse(portPath[1]);
+ if(_portAccessors[portName].Type.IsArray){
+ if (_portAccessors[portName].GetValue(NodeData) is Array array)
+ return array.GetValue(index);
+ }
+
+ if (_portAccessors[portName].Type.IsGenericType){
+ if (_portAccessors[portName].GetValue(NodeData) is IList list)
+ return list[index];
+ }
+ }
return _portAccessors[portName].GetValue(NodeData);
}
public string[] GetPortsOfType (){
diff --git a/Tests.meta b/TNodeCore/Tests.meta
similarity index 100%
rename from Tests.meta
rename to TNodeCore/Tests.meta
diff --git a/TNodeCore/Tests/Editor.meta b/TNodeCore/Tests/Editor.meta
new file mode 100644
index 0000000..e7ad56f
--- /dev/null
+++ b/TNodeCore/Tests/Editor.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 7390f9f15b054e6bab7abbb4afefee48
+timeCreated: 1660804507
\ No newline at end of file
diff --git a/TNodeCore/Tests/Runtime.meta b/TNodeCore/Tests/Runtime.meta
new file mode 100644
index 0000000..bf8be39
--- /dev/null
+++ b/TNodeCore/Tests/Runtime.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 44e6960483c34cc5bd93c350a34a1106
+timeCreated: 1660804527
\ No newline at end of file
diff --git a/TNodeGraphViewImpl/Editor/Cache/NodeEditorExtensions.cs b/TNodeGraphViewImpl/Editor/Cache/NodeEditorExtensions.cs
index 028ebe0..3b12042 100644
--- a/TNodeGraphViewImpl/Editor/Cache/NodeEditorExtensions.cs
+++ b/TNodeGraphViewImpl/Editor/Cache/NodeEditorExtensions.cs
@@ -278,7 +278,7 @@ namespace TNodeGraphViewImpl.Editor.Cache{
public class Launcher{
static Launcher(){
//Get version of the package
- Debug.Log("TNodeCore v0.01 is launched");
+
NodeEditorSingleton.Instance.Initialize();
}
}
diff --git a/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs b/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs
index ba06ad6..3fd158f 100644
--- a/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs
+++ b/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs
@@ -426,9 +426,9 @@ namespace TNodeGraphViewImpl.Editor.NodeGraphView{
}
public void ResetGraphView(){
ClearAll();
-
LoadPersistentGraphViewData();
if (_nodeDict == null) throw new ArgumentNullException(nameof(_nodeDict));
+ if (_data == null) return;
foreach (var dataNode in _data.NodeDictionary.Values){
if(dataNode==null)
continue;
@@ -484,6 +484,7 @@ namespace TNodeGraphViewImpl.Editor.NodeGraphView{
}
private void LoadPersistentGraphViewData(){
+ if (_data == null) return;
var r= _data.GraphViewModel;
viewTransformChanged-=OnViewTransformChanged;
UpdateViewTransform(r.persistOffset,new Vector3(r.persistScale,r.persistScale,1));
@@ -586,9 +587,7 @@ namespace TNodeGraphViewImpl.Editor.NodeGraphView{
});
links.Add(newNodeLink);
}
-
}
-
_data.NodeLinks = links;
}
private void SaveGraphData(){
@@ -698,6 +697,9 @@ namespace TNodeGraphViewImpl.Editor.NodeGraphView{
///
/// The give rect is the actual position in the graph view
public void AddTNode(NodeData nodeData, Rect rect){
+ if (nodeData==null||nodeData.id == null){
+ return;
+ }
if (NodeEditorExtensions.CreateNodeViewFromNodeType(nodeData.GetType()) is Node nodeView){
//convert rect at graph space
@@ -716,12 +718,9 @@ namespace TNodeGraphViewImpl.Editor.NodeGraphView{
}
}
});
-
-
-
if(_nodeDict.ContainsKey(nodeData.id)==false)
_nodeDict.Add(nodeData.id, nodeView);
- if (_data.NodeDictionary.ContainsKey(nodeData.id) == false){
+ if (_data!=null&&_data.NodeDictionary.ContainsKey(nodeData.id) == false){
Undo.RegisterCompleteObjectUndo(_data,"Node Creation");
_data.NodeDictionary.Add(nodeData.id,nodeData);
}
diff --git a/TNodeGraphViewImpl/Editor/NodeViews/NodeView.cs b/TNodeGraphViewImpl/Editor/NodeViews/NodeView.cs
index 59fc964..59d623f 100644
--- a/TNodeGraphViewImpl/Editor/NodeViews/NodeView.cs
+++ b/TNodeGraphViewImpl/Editor/NodeViews/NodeView.cs
@@ -95,10 +95,15 @@ namespace TNodeGraphViewImpl.Editor.NodeViews{
BuildDoubleClickRename();
}
private void OnDataChangedHandler(T obj){
+ if(obj.id==null||obj.id.Trim(' ').Length==0){
+ Debug.LogWarning("You should not use a node data without id");
+ return;
+ }
this.title = _data.nodeName;
if (_nodeInspectorInNode != null){
_nodeInspectorInNode.Data = obj;
}
+
_viewLogger ??= new NodeViewLogger{NodeView = this};
if (NodeLogger.Loggers.ContainsKey(obj.id)){
NodeLogger.Loggers[obj.id] = _viewLogger;
@@ -166,7 +171,8 @@ namespace TNodeGraphViewImpl.Editor.NodeViews{
}
}
- public virtual Type BuildGroupPortType(PortAttribute portAttribute,PropertyInfo propertyInfo,int index){
+
+ protected virtual Type BuildGroupPortType(PortAttribute portAttribute,PropertyInfo propertyInfo,int index){
var iList = propertyInfo.GetValue(_data) as IList;
if (iList is Array array){
switch (portAttribute.TypeHandling){
@@ -224,7 +230,7 @@ namespace TNodeGraphViewImpl.Editor.NodeViews{
var port = new CustomPort(Orientation.Horizontal, Direction.Output,
Port.Capacity.Single,
BuildGroupPortType(attribute, propertyInfo,i));
- BuildPort(port, attribute, propertyInfo,outputContainer);
+ BuildGroupPort(port, attribute, propertyInfo,outputContainer,list[i],i);
}
}
}
@@ -240,7 +246,17 @@ namespace TNodeGraphViewImpl.Editor.NodeViews{
BuildPort(port,attribute,propertyInfo,inputContainer);
}
else{
-
+ var propertyValue = propertyInfo.GetValue(_data);
+ if (propertyValue is IList list){
+
+ for (var i = 0; i < list.Count; i++){
+ var port = new CustomPort(Orientation.Horizontal, Direction.Input,
+ Port.Capacity.Single,
+ BuildGroupPortType(attribute, propertyInfo,i));
+ BuildGroupPort(port, attribute, propertyInfo,inputContainer,list[i],i);
+
+ }
+ }
}
}
}
@@ -261,6 +277,7 @@ namespace TNodeGraphViewImpl.Editor.NodeViews{
private void BuildGroupPort(Port port, PortAttribute attribute, PropertyInfo propertyInfo,
VisualElement portContainer,object currentElement,int index = 0){
portContainer.Add(port);
+ port.name = propertyInfo.Name + ":" + index;
if (currentElement is string str){
if (attribute.NameHandling == PortNameHandling.Auto){
port.portName = str;
diff --git a/TNodeGraphViewImpl/Tests.meta b/TNodeGraphViewImpl/Tests.meta
new file mode 100644
index 0000000..f937873
--- /dev/null
+++ b/TNodeGraphViewImpl/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 61d88b1f3fc14972aa28c22a5afaa53e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: