diff --git a/TNode/TNodeCore/Runtime/Components/RuntimeGraph.cs b/TNode/TNodeCore/Runtime/Components/RuntimeGraph.cs index 2363561..64fc549 100644 --- a/TNode/TNodeCore/Runtime/Components/RuntimeGraph.cs +++ b/TNode/TNodeCore/Runtime/Components/RuntimeGraph.cs @@ -196,6 +196,10 @@ namespace TNodeCore.Runtime.Components{ ModifyOrCreateInNode(linkData); ModifyOrCreateOutNode(linkData); } + //iterate nodes and create runtime nodes + foreach (var nodeData in graphData.NodeDictionary.Values){ + CreateRuntimeNodeIfNone(nodeData); + } var nodeList = RuntimeNodes.Values; _graphTool = new GraphTool(nodeList.ToList(),RuntimeNodes,this); var sceneNodes = RuntimeNodes.Values.Where(x => x.NodeData is SceneNodeData).Select(x => x.NodeData as SceneNodeData); @@ -208,6 +212,12 @@ namespace TNodeCore.Runtime.Components{ _build = true; } + private void CreateRuntimeNodeIfNone(NodeData nodeData){ + if (RuntimeNodes.ContainsKey(nodeData.id)) return; + var runtimeNode = new RuntimeNode(nodeData); + RuntimeNodes.Add(nodeData.id,runtimeNode); + } + /// /// Cast the node data to a runtime node /// @@ -227,6 +237,8 @@ namespace TNodeCore.Runtime.Components{ /// /// public RuntimeNode Get(string id){ + if(!_build) + Build(); if (RuntimeNodes.ContainsKey(id)){ return RuntimeNodes[id]; } @@ -266,13 +278,11 @@ namespace TNodeCore.Runtime.Components{ public void BuildSceneNode(){ var fetchedSceneNode = graphData.NodeDictionary.Values.Where(x => x is SceneNodeData and not BlackboardDragNodeData); + var scenePersistent = transform.Find("PersistentData").GetComponent(); foreach (var nodeData in fetchedSceneNode){ - if (transform.Find(nodeData.id.GetHashCode().ToString())){ - var scenePersistent = transform.Find("PersistentData").GetComponent(); - if (scenePersistent.SceneNodeDataDictionary.ContainsKey(nodeData.id)){ - var sceneNodeData = scenePersistent.SceneNodeDataDictionary[nodeData.id]; - RuntimeNodes[nodeData.id].NodeData = sceneNodeData; - } + if (scenePersistent.SceneNodeDataDictionary.ContainsKey(nodeData.id)){ + var sceneNodeData = scenePersistent.SceneNodeDataDictionary[nodeData.id]; + RuntimeNodes[nodeData.id].NodeData = sceneNodeData; } else if (nodeData.Clone() is SceneNodeData clonedNodeData){ clonedNodeData.BlackboardData = runtimeBlackboardData; diff --git a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs index 6eb4104..7aabeb9 100644 --- a/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs +++ b/TNode/TNodeGraphViewImpl/Editor/NodeGraphView/DataGraphView.cs @@ -281,10 +281,12 @@ namespace TNode.TNodeGraphViewImpl.Editor.NodeGraphView{ continue; //Get the derived type of NodeAttribute View from the node type if (dataNode is SceneNodeData runtimeNodeData){ - if (runtimeNodeData is not BlackboardDragNodeData){ + if (runtimeNodeData is BlackboardDragNodeData){ runtimeNodeData.BlackboardData = GetBlackboardData(); + AddPersistentNode(runtimeNodeData); } else{ + var node = _runtimeGraph.Get(runtimeNodeData.id).NodeData as SceneNodeData; AddPersistentNode(node); } diff --git a/TilemapGenerator.meta b/TilemapGenerator.meta new file mode 100644 index 0000000..fb32c7a --- /dev/null +++ b/TilemapGenerator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf0168c8ec1f9304c9872577b1e6abdf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: