fix:fix port conversion bug

main
taoria 3 years ago
parent 73ee3ec911
commit 5e4c012a5e
  1. 12
      Samples/HandWriterConverter.cs
  2. 3
      Samples/HandWriterConverter.cs.meta
  3. 102
      Samples/New HelloGraph.asset
  4. 26
      TNodeCore/Runtime/Models/BlackboardDragNode.cs
  5. 14
      TNodeCore/Runtime/RuntimeCache/RuntimeCache.cs

@ -0,0 +1,12 @@
using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Interfaces;
using UnityEngine;
namespace Samples{
[GraphUsage(typeof(HelloGraph))]
public class HandWriterConverter:PortTypeConversion<GameObject,Vector3>{
public override Vector3 Convert(GameObject tFrom){
return tFrom.gameObject.transform.position;
}
}
}

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 052c65cd0a43406ca7bb9dbb3cf13542
timeCreated: 1660616016

@ -17,92 +17,117 @@ MonoBehaviour:
- id: 1 - id: 1
- id: 2 - id: 2
- id: 3 - id: 3
- id: 4
nodeLinks: nodeLinks:
- inPort: - inPort:
portEntryName: A portEntryName: A
nodeDataId: 1cf6c28a-a878-4ca6-9170-423975702f0f nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
outPort: outPort:
portEntryName: Value portEntryName: Value
nodeDataId: a8a42372-3106-4028-ba4a-b1e92df29396 nodeDataId: ae519ad8-4bc8-46c5-a98a-dc95bc85b58a
- inPort: - inPort:
portEntryName: B portEntryName: A
nodeDataId: 1cf6c28a-a878-4ca6-9170-423975702f0f nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
outPort: outPort:
portEntryName: Value portEntryName: Value
nodeDataId: e211ba2b-6ea0-46e8-a319-aa05602eaf46 nodeDataId: 23526615-f15c-4bdf-96c2-38a57d30b10d
- inPort: - inPort:
portEntryName: A portEntryName: A
nodeDataId: 1cf6c28a-a878-4ca6-9170-423975702f0f nodeDataId: f33d73da-40c5-4b3a-ace7-40105e3489b6
outPort: outPort:
portEntryName: Value portEntryName: Value
nodeDataId: e211ba2b-6ea0-46e8-a319-aa05602eaf46 nodeDataId: 06f5acb9-58d5-41b3-b7f5-bd90f7f9ab94
blackboardData: blackboardData:
id: 4 id: 5
sceneReference: sceneReference:
editorModels: [] editorModels:
- id: 6
graphViewModel: graphViewModel:
id: 5 id: 7
references: references:
version: 1 version: 1
00000000: 00000000:
type: {class: AddNode, ns: Samples, asm: Assembly-CSharp} type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
data: data:
positionInView: positionInView:
serializedVersion: 2 serializedVersion: 2
x: 292 x: -345
y: -32 y: 21
width: 0 width: 0
height: 0 height: 0
id: 1cf6c28a-a878-4ca6-9170-423975702f0f id: 23526615-f15c-4bdf-96c2-38a57d30b10d
nodeName: AddNode nodeName:
entryPoint: 0 entryPoint: 0
isTest: 0 isTest: 0
blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
blackDragData: HelloGameObject
isListElement: 0
00000001: 00000001:
type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore} type: {class: AddNode, ns: Samples, asm: Assembly-CSharp}
data: data:
positionInView: positionInView:
serializedVersion: 2 serializedVersion: 2
x: 29 x: 0
y: -10 y: 0
width: 0 width: 0
height: 0 height: 0
id: a8a42372-3106-4028-ba4a-b1e92df29396 id: f33d73da-40c5-4b3a-ace7-40105e3489b6
nodeName: nodeName: AddNode
entryPoint: 0 entryPoint: 0
isTest: 0 isTest: 0
blackDragData: V3S.0
isListElement: 1
00000002: 00000002:
type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore} type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
data: data:
positionInView: positionInView:
serializedVersion: 2 serializedVersion: 2
x: 38 x: -345
y: 70 y: 60
width: 0 width: 0
height: 0 height: 0
id: e211ba2b-6ea0-46e8-a319-aa05602eaf46 id: ae519ad8-4bc8-46c5-a98a-dc95bc85b58a
nodeName: nodeName:
entryPoint: 0 entryPoint: 0
isTest: 0 isTest: 0
blackDragData: V2S.0 blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
isListElement: 1 Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
blackDragData: HelloGameObject
isListElement: 0
00000003: 00000003:
type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore} type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
data: data:
positionInView: positionInView:
serializedVersion: 2 serializedVersion: 2
x: -10 x: -345
y: -95 y: -21
width: 0 width: 0
height: 0 height: 0
id: 33d100b8-692c-445f-99e0-329727670e93 id: 06f5acb9-58d5-41b3-b7f5-bd90f7f9ab94
nodeName: nodeName:
entryPoint: 0 entryPoint: 0
isTest: 0 isTest: 0
blackboardDragTypeString: UnityEngine.GameObject, UnityEngine.CoreModule,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
blackDragData: HelloGameObject blackDragData: HelloGameObject
isListElement: 0 isListElement: 0
00000004: 00000004:
type: {class: BlackboardDragNode, ns: TNodeCore.Runtime.Models, asm: TNodeCore}
data:
positionInView:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
id: a705abd9-5c22-4410-812f-d824ddfa60d8
nodeName:
entryPoint: 0
isTest: 0
blackboardDragTypeString: System.String, mscorlib, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
blackDragData: HelloString
isListElement: 0
00000005:
type: {class: HelloBlackboard, ns: TNode.Samples, asm: Assembly-CSharp} type: {class: HelloBlackboard, ns: TNode.Samples, asm: Assembly-CSharp}
data: data:
positionInView: positionInView:
@ -118,7 +143,20 @@ MonoBehaviour:
- {x: 0, y: 0, z: 0} - {x: 0, y: 0, z: 0}
V2S: V2S:
- {x: 0, y: 0} - {x: 0, y: 0}
00000005: 00000006:
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
00000007:
type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: TNodeCore} type: {class: GraphViewModel, ns: TNode.TNodeCore.Editor.Models, asm: TNodeCore}
data: data:
positionInView: positionInView:
@ -129,5 +167,5 @@ MonoBehaviour:
height: 0 height: 0
id: id:
persistScale: 1 persistScale: 1
persistOffset: {x: 487, y: 320} persistOffset: {x: 519, y: 347}
isBlackboardOn: 1 isBlackboardOn: 1

@ -2,11 +2,13 @@
using TNodeCore.Runtime.Attributes; using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Attributes.Ports; using TNodeCore.Runtime.Attributes.Ports;
using TNodeCore.Runtime.RuntimeCache; using TNodeCore.Runtime.RuntimeCache;
using UnityEngine;
using UnityEngine.Serialization;
namespace TNodeCore.Runtime.Models{ namespace TNodeCore.Runtime.Models{
[Serializable] [Serializable]
[InternalUsage] [InternalUsage]
public class BlackboardDragNode:SceneNode{ public class BlackboardDragNode:SceneNode,ISerializationCallbackReceiver{
public string BlackDragData{ public string BlackDragData{
get => blackDragData; get => blackDragData;
set{ set{
@ -16,11 +18,16 @@ namespace TNodeCore.Runtime.Models{
} }
} }
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public Type BlackboardDragType{ get; set; }
public Type BlackboardDragType;
[SerializeField]
private string blackboardDragTypeString;
public string blackDragData; public string blackDragData;
/// TODO : The type handling in a safer way in the future /// TODO : The type handling in a safer way in the future
@ -40,5 +47,18 @@ namespace TNodeCore.Runtime.Models{
} }
public bool isListElement=false; public bool isListElement=false;
public void OnBeforeSerialize(){
if (BlackboardDragType != null){
blackboardDragTypeString = BlackboardDragType.AssemblyQualifiedName;
}
}
public void OnAfterDeserialize(){
if(blackboardDragTypeString != null){
BlackboardDragType = Type.GetType(blackboardDragTypeString);
}
}
} }
} }

@ -6,6 +6,7 @@ using System.Reflection;
using TNodeCore.Runtime.Attributes; using TNodeCore.Runtime.Attributes;
using TNodeCore.Runtime.Interfaces; using TNodeCore.Runtime.Interfaces;
using TNodeCore.Runtime.Models; using TNodeCore.Runtime.Models;
using UnityEngine;
namespace TNodeCore.Runtime.RuntimeCache{ namespace TNodeCore.Runtime.RuntimeCache{
public class PropAccessor<T1, T2>:IModelPropertyAccessor{ public class PropAccessor<T1, T2>:IModelPropertyAccessor{
@ -134,20 +135,23 @@ namespace TNodeCore.Runtime.RuntimeCache{
if(type.BaseType is{IsGenericType: true} && type.BaseType.GetGenericTypeDefinition()==typeof(PortTypeConversion<,>)){ if(type.BaseType is{IsGenericType: true} && type.BaseType.GetGenericTypeDefinition()==typeof(PortTypeConversion<,>)){
//if it is, add it to the cache //if it is, add it to the cache
CacheRuntimePortTypeConversion(type); CacheRuntimePortTypeConversion(type);
}
else{
} }
} }
private void CacheRuntimePortTypeConversion(Type type){ private void CacheRuntimePortTypeConversion(Type type){
if (type.BaseType == null) return; if (type.BaseType == null) return;
if (type.BaseType != null){ if (type.BaseType != null){
var genericType = type.BaseType.GetGenericTypeDefinition(); var genericType = type.BaseType.GetGenericTypeDefinition();
if (genericType != typeof(PortTypeConversion<,>)|| genericType != typeof(TwoWayPortTypeConversion<,>)){ if (genericType != typeof(PortTypeConversion<,>) && genericType != typeof(TwoWayPortTypeConversion<,>)){
return; return;
} }
} }
//Forward direction //Forward direction
var type1 = type.BaseType.GetGenericArguments()[0]; var type1 = type.BaseType.GetGenericArguments()[0];
var type2 = type.BaseType.GetGenericArguments()[1]; var type2 = type.BaseType.GetGenericArguments()[1];
@ -229,9 +233,11 @@ namespace TNodeCore.Runtime.RuntimeCache{
} }
public List<Type> GetSupportedTypes(Type type){ public List<Type> GetSupportedTypes(Type type){
if(!CachedPortConverters.ContainsKey(type)){ if(!CachedPortConverters.ContainsKey(type)){
return new List<Type>(); return new List<Type>();
} }
return CachedPortConverters[type].Keys.ToList(); return CachedPortConverters[type].Keys.ToList();
} }

Loading…
Cancel
Save