From 7f780299b18547e27e9d79f1cc8221ce412d7668 Mon Sep 17 00:00:00 2001 From: taoria <445625470@qq.com> Date: Fri, 1 Jul 2022 21:43:32 +0800 Subject: [PATCH] 1.yet continue working on node serialization --- TNode/Editor/BaseViews/DataGraphView.cs | 10 +++++++++- TNode/Models/GraphData.cs | 24 ++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/TNode/Editor/BaseViews/DataGraphView.cs b/TNode/Editor/BaseViews/DataGraphView.cs index 23e78fa..bfb95c2 100644 --- a/TNode/Editor/BaseViews/DataGraphView.cs +++ b/TNode/Editor/BaseViews/DataGraphView.cs @@ -129,7 +129,7 @@ namespace TNode.Editor.BaseViews{ foreach (var edge in edges){ RemoveElement(edge); } - foreach (var dataNode in _data.nodes){ + foreach (var dataNode in _data.NodeDictionary.Values){ if(dataNode==null) continue; @@ -225,6 +225,7 @@ namespace TNode.Editor.BaseViews{ nodeEditorData.nodeGuid = nodeView.GetNodeData().id; } graphEditorData.nodesData.Add(nodeEditorData); + EditorUtility.SetDirty(graphEditorData); } } public void LoadEditorData(GraphEditorData graphEditorData){ @@ -240,7 +241,14 @@ namespace TNode.Editor.BaseViews{ } public void SaveWithEditorData(GraphEditorData graphEditorData){ SaveEditorData(graphEditorData); + SaveGraphData(); } + + private void SaveGraphData(){ + EditorUtility.SetDirty(_data); + AssetDatabase.SaveAssets(); + } + public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter){ return ports.Where(x => x.portType == startPort.portType).ToList(); } diff --git a/TNode/Models/GraphData.cs b/TNode/Models/GraphData.cs index ad25295..c05836f 100644 --- a/TNode/Models/GraphData.cs +++ b/TNode/Models/GraphData.cs @@ -1,18 +1,26 @@ using System; using System.Collections.Generic; using UnityEngine; +using Newtonsoft.Json; namespace TNode.Models{ [Serializable] - public class GraphData:ScriptableObject{ - [SerializeReference] - public List nodes; + public class GraphData:ScriptableObject,ISerializationCallbackReceiver{ + [SerializeField] + public Dictionary NodeDictionary = new Dictionary(); - [SerializeReference] - public List nodeLinks; + [SerializeField] [HideInInspector] - [SerializeReference] - public NodeData entryNode; - + private string jsonObject; + + public void OnBeforeSerialize(){ + var serializedData = JsonConvert.SerializeObject(NodeDictionary); + jsonObject = serializedData; + } + + public void OnAfterDeserialize(){ + var deserializedData = JsonConvert.DeserializeObject>(jsonObject); + NodeDictionary = deserializedData; + } } } \ No newline at end of file