private static TaskNode DeserializeNode(JToken token, TaskSerializationData data, BehaviourGraphView view) { var obj = token as JObject; var type = TaskUtility.GetTypeWithinAssembly(obj.Value <string>("Type")); var nData = obj.Value <JObject>("NodeData"); var position = nData.GetValue("Offset").ToObject <Vector2>(NodeSerializer.Serializer); var node = view.CreateNode(type, position); var name = obj.Value <string>("Name"); var id = obj.Value <int>("ID"); var instant = obj.Value <bool>("Instant"); node.title = name; node.Data = DeserializeObject(obj, type, view, data.fieldSerializationData.unityObjects, node) as Task; node.Data.FriendlyName = name; node.Data.IsInstant = instant; node.Data.ID = id; var children = obj.GetValue("Children"); if (children is JArray array) { foreach (var entry in array) { var child = DeserializeNode(entry, data, view); view.Connect(child, node); } } return(node); }
public static void Deserialize(TaskSerializationData data, BehaviourGraphView view) { if (string.IsNullOrEmpty(data.JSONSerialization)) { return; } var obj = JObject.Parse(data.JSONSerialization); var entry = DeserializeNode(obj.GetValue("EntryTask"), data, view); var root = DeserializeNode(obj.GetValue("RootTask"), data, view); DeserializeVariables(obj.GetValue("Variables"), view); view.Connect(root, entry); }