public static Dictionary <string, object> SerializeTask(Task task, bool serializeChildren, ref List <UnityEngine.Object> unityObjects)
        {
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            dictionary.Add("ObjectType", task.GetType());
            dictionary.Add("NodeData", SerializeJSON.SerializeNodeData(task.NodeData));
            dictionary.Add("ID", task.ID);
            dictionary.Add("Name", task.FriendlyName);
            dictionary.Add("Instant", task.IsInstant);
            SerializeJSON.SerializeFields(task, ref dictionary, ref unityObjects);
            if (serializeChildren && task is ParentTask)
            {
                ParentTask parentTask = task as ParentTask;
                if (parentTask.Children != null && parentTask.Children.Count > 0)
                {
                    Dictionary <string, object>[] array = new Dictionary <string, object> [parentTask.Children.Count];
                    for (int i = 0; i < parentTask.Children.Count; i++)
                    {
                        array[i] = SerializeJSON.SerializeTask(parentTask.Children[i], serializeChildren, ref unityObjects);
                    }
                    dictionary.Add("Children", array);
                }
            }
            return(dictionary);
        }
        public static void Save(BehaviorSource behaviorSource)
        {
            behaviorSource.CheckForSerialization(false, null);
            SerializeJSON.taskSerializationData  = new TaskSerializationData();
            SerializeJSON.fieldSerializationData = SerializeJSON.taskSerializationData.fieldSerializationData;
            Dictionary <string, object> dictionary = new Dictionary <string, object>();

            if (behaviorSource.EntryTask != null)
            {
                dictionary.Add("EntryTask", SerializeJSON.SerializeTask(behaviorSource.EntryTask, true, ref SerializeJSON.fieldSerializationData.unityObjects));
            }
            if (behaviorSource.RootTask != null)
            {
                dictionary.Add("RootTask", SerializeJSON.SerializeTask(behaviorSource.RootTask, true, ref SerializeJSON.fieldSerializationData.unityObjects));
            }
            if (behaviorSource.DetachedTasks != null && behaviorSource.DetachedTasks.Count > 0)
            {
                Dictionary <string, object>[] array = new Dictionary <string, object> [behaviorSource.DetachedTasks.Count];
                for (int i = 0; i < behaviorSource.DetachedTasks.Count; i++)
                {
                    array[i] = SerializeJSON.SerializeTask(behaviorSource.DetachedTasks[i], true, ref SerializeJSON.fieldSerializationData.unityObjects);
                }
                dictionary.Add("DetachedTasks", array);
            }
            if (behaviorSource.Variables != null && behaviorSource.Variables.Count > 0)
            {
                dictionary.Add("Variables", SerializeJSON.SerializeVariables(behaviorSource.Variables, ref SerializeJSON.fieldSerializationData.unityObjects));
            }
            SerializeJSON.taskSerializationData.JSONSerialization = MiniJSON.Serialize(dictionary);
            behaviorSource.TaskData = SerializeJSON.taskSerializationData;
            if (behaviorSource.Owner != null)
            {
                EditorUtility.SetDirty(behaviorSource.Owner.GetObject());
            }
        }
示例#3
0
        public static TaskSerializer CopySerialized(Task task)
        {
            TaskSerializer taskSerializer = new TaskSerializer();

            taskSerializer.offset        = (task.NodeData.NodeDesigner as NodeDesigner).GetAbsolutePosition() + new Vector2(10f, 10f);
            taskSerializer.unityObjects  = new List <UnityEngine.Object>();
            taskSerializer.serialization = MiniJSON.Serialize(SerializeJSON.SerializeTask(task, false, ref taskSerializer.unityObjects));
            return(taskSerializer);
        }