Ejemplo n.º 1
0
        /// <summary>
        /// 通过序列化信息解析数据
        /// </summary>
        /// <param name="force">强制解析</param>
        /// <param name="behaviorSource"></param>
        /// <returns></returns>
        public bool CheckForSerialization(bool force, BehaviorSource behaviorSource = null)
        {
            bool flag = (behaviorSource == null) ? this.HasSerialized : behaviorSource.HasSerialized;

            if (!flag || force)
            {
                if (behaviorSource != null)
                {
                    behaviorSource.HasSerialized = true;
                }
                else
                {
                    this.HasSerialized = true;
                }
                if (this.mTaskData != null && !string.IsNullOrEmpty(this.mTaskData.JSONSerialization))
                {
                    JSONDeserialization.Load(this.mTaskData, (behaviorSource != null) ? behaviorSource : this);
                }
                else
                {
                    BinaryDeserialization.Load(this.mTaskData, (behaviorSource != null) ? behaviorSource : this);
                }
                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
        // Token: 0x06000157 RID: 343 RVA: 0x0000BFA4 File Offset: 0x0000A1A4
        public static void Load(string serialization, GlobalVariables globalVariables, string version)
        {
            if (globalVariables == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(version))
            {
                JSONDeserializationDeprecated.Load(serialization, globalVariables);
                return;
            }
            Dictionary <string, object> dictionary = MiniJSON.Deserialize(serialization) as Dictionary <string, object>;

            if (dictionary == null)
            {
                Debug.Log("Failed to deserialize");
                return;
            }
            if (globalVariables.VariableData == null)
            {
                globalVariables.VariableData = new VariableSerializationData();
            }
            JSONDeserialization.updatedSerialization = (globalVariables.Version.CompareTo("1.5.7") >= 0);
            JSONDeserialization.DeserializeVariables(globalVariables, dictionary, globalVariables.VariableData.fieldSerializationData.unityObjects);
        }
 public void CheckForSerialization(bool force)
 {
     if (force || this.mVariables == null || (this.mVariables.Count > 0 && this.mVariables[0] == null))
     {
         if (this.VariableData != null && !string.IsNullOrEmpty(this.VariableData.JSONSerialization))
         {
             JSONDeserialization.Load(this.VariableData.JSONSerialization, this, this.mVersion);
         }
         else
         {
             BinaryDeserialization.Load(this, this.mVersion);
         }
     }
 }
Ejemplo n.º 4
0
        // Token: 0x06000158 RID: 344 RVA: 0x0000C038 File Offset: 0x0000A238
        private static void DeserializeVariables(IVariableSource variableSource, Dictionary <string, object> dict, List <UnityEngine.Object> unityObjects)
        {
            object obj;

            if (dict.TryGetValue("Variables", out obj))
            {
                List <SharedVariable> list = new List <SharedVariable>();
                IList list2 = obj as IList;
                for (int i = 0; i < list2.Count; i++)
                {
                    SharedVariable item = JSONDeserialization.DeserializeSharedVariable(list2[i] as Dictionary <string, object>, variableSource, true, unityObjects);
                    list.Add(item);
                }
                variableSource.SetAllVariables(list);
            }
        }
Ejemplo n.º 5
0
        // Token: 0x0600015A RID: 346 RVA: 0x0000C33C File Offset: 0x0000A53C
        private static NodeData DeserializeNodeData(Dictionary <string, object> dict, Task task)
        {
            NodeData nodeData = new NodeData();
            object   obj;

            if (dict.TryGetValue("Offset", out obj))
            {
                nodeData.Offset = JSONDeserialization.StringToVector2((string)obj);
            }
            if (dict.TryGetValue("FriendlyName", out obj))
            {
                task.FriendlyName = (string)obj;
            }
            if (dict.TryGetValue("Comment", out obj))
            {
                nodeData.Comment = (string)obj;
            }
            if (dict.TryGetValue("IsBreakpoint", out obj))
            {
                nodeData.IsBreakpoint = Convert.ToBoolean(obj);
            }
            if (dict.TryGetValue("Collapsed", out obj))
            {
                nodeData.Collapsed = Convert.ToBoolean(obj);
            }
            if (dict.TryGetValue("ColorIndex", out obj))
            {
                nodeData.ColorIndex = Convert.ToInt32(obj);
            }
            if (dict.TryGetValue("WatchedFields", out obj))
            {
                nodeData.WatchedFieldNames = new List <string>();
                nodeData.WatchedFields     = new List <FieldInfo>();
                IList list = obj as IList;
                for (int i = 0; i < list.Count; i++)
                {
                    FieldInfo field = task.GetType().GetField((string)list[i], BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                    if (field != null)
                    {
                        nodeData.WatchedFieldNames.Add(field.Name);
                        nodeData.WatchedFields.Add(field);
                    }
                }
            }
            return(nodeData);
        }
Ejemplo n.º 6
0
        // Token: 0x0600015D RID: 349 RVA: 0x0000CB28 File Offset: 0x0000AD28
        private static object ValueToObject(Task task, Type type, object obj, IVariableSource variableSource, List <UnityEngine.Object> unityObjects)
        {
            if (typeof(SharedVariable).IsAssignableFrom(type))
            {
                SharedVariable sharedVariable = JSONDeserialization.DeserializeSharedVariable(obj as Dictionary <string, object>, variableSource, false, unityObjects);
                if (sharedVariable == null)
                {
                    sharedVariable = (TaskUtility.CreateInstance(type) as SharedVariable);
                }
                return(sharedVariable);
            }
            if (type.Equals(typeof(UnityEngine.Object)) || type.IsSubclassOf(typeof(UnityEngine.Object)))
            {
                return(JSONDeserialization.IndexToUnityObject(Convert.ToInt32(obj), unityObjects));
            }
            if (!type.IsPrimitive)
            {
                if (!type.Equals(typeof(string)))
                {
                    goto IL_B0;
                }
            }
            try
            {
                return(Convert.ChangeType(obj, type));
            }
            catch (Exception)
            {
                return(null);
            }
IL_B0:
            if (type.IsSubclassOf(typeof(Enum)))
            {
                try
                {
                    return(Enum.Parse(type, (string)obj));
                }
                catch (Exception)
                {
                    return(null);
                }
            }
            if (type.Equals(typeof(Vector2)))
            {
                return(JSONDeserialization.StringToVector2((string)obj));
            }
            if (type.Equals(typeof(Vector3)))
            {
                return(JSONDeserialization.StringToVector3((string)obj));
            }
            if (type.Equals(typeof(Vector4)))
            {
                return(JSONDeserialization.StringToVector4((string)obj));
            }
            if (type.Equals(typeof(Quaternion)))
            {
                return(JSONDeserialization.StringToQuaternion((string)obj));
            }
            if (type.Equals(typeof(Matrix4x4)))
            {
                return(JSONDeserialization.StringToMatrix4x4((string)obj));
            }
            if (type.Equals(typeof(Color)))
            {
                return(JSONDeserialization.StringToColor((string)obj));
            }
            if (type.Equals(typeof(Rect)))
            {
                return(JSONDeserialization.StringToRect((string)obj));
            }
            if (type.Equals(typeof(LayerMask)))
            {
                return(JSONDeserialization.ValueToLayerMask(Convert.ToInt32(obj)));
            }
            if (type.Equals(typeof(AnimationCurve)))
            {
                return(JSONDeserialization.ValueToAnimationCurve((Dictionary <string, object>)obj));
            }
            object obj2 = TaskUtility.CreateInstance(type);

            JSONDeserialization.DeserializeObject(task, obj2, obj as Dictionary <string, object>, variableSource, unityObjects);
            return(obj2);
        }
Ejemplo n.º 7
0
 // Token: 0x0600015C RID: 348 RVA: 0x0000C670 File Offset: 0x0000A870
 private static void DeserializeObject(Task task, object obj, Dictionary <string, object> dict, IVariableSource variableSource, List <UnityEngine.Object> unityObjects)
 {
     if (dict == null)
     {
         return;
     }
     FieldInfo[] allFields = TaskUtility.GetAllFields(obj.GetType());
     for (int i = 0; i < allFields.Length; i++)
     {
         string key = (!JSONDeserialization.updatedSerialization) ? (allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString() : (allFields[i].FieldType.Name + allFields[i].Name);
         object obj2;
         if (dict.TryGetValue(key, out obj2))
         {
             if (typeof(IList).IsAssignableFrom(allFields[i].FieldType))
             {
                 IList list = obj2 as IList;
                 if (list != null)
                 {
                     Type type;
                     if (allFields[i].FieldType.IsArray)
                     {
                         type = allFields[i].FieldType.GetElementType();
                     }
                     else
                     {
                         Type type2 = allFields[i].FieldType;
                         while (!type2.IsGenericType)
                         {
                             type2 = type2.BaseType;
                         }
                         type = type2.GetGenericArguments()[0];
                     }
                     bool flag = type.Equals(typeof(Task)) || type.IsSubclassOf(typeof(Task));
                     if (flag)
                     {
                         if (JSONDeserialization.taskIDs != null)
                         {
                             List <int> list2 = new List <int>();
                             for (int j = 0; j < list.Count; j++)
                             {
                                 list2.Add(Convert.ToInt32(list[j]));
                             }
                             JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list2);
                         }
                     }
                     else if (allFields[i].FieldType.IsArray)
                     {
                         Array array = Array.CreateInstance(type, list.Count);
                         for (int k = 0; k < list.Count; k++)
                         {
                             if (list[k] == null)
                             {
                                 array.SetValue(null, k);
                             }
                             else
                             {
                                 array.SetValue(JSONDeserialization.ValueToObject(task, type, list[k], variableSource, unityObjects), k);
                             }
                         }
                         allFields[i].SetValue(obj, array);
                     }
                     else
                     {
                         IList list3;
                         if (allFields[i].FieldType.IsGenericType)
                         {
                             list3 = (TaskUtility.CreateInstance(typeof(List <>).MakeGenericType(new Type[]
                             {
                                 type
                             })) as IList);
                         }
                         else
                         {
                             list3 = (TaskUtility.CreateInstance(allFields[i].FieldType) as IList);
                         }
                         for (int l = 0; l < list.Count; l++)
                         {
                             if (list[l] == null)
                             {
                                 list3.Add(null);
                             }
                             else
                             {
                                 list3.Add(JSONDeserialization.ValueToObject(task, type, list[l], variableSource, unityObjects));
                             }
                         }
                         allFields[i].SetValue(obj, list3);
                     }
                 }
             }
             else
             {
                 Type fieldType = allFields[i].FieldType;
                 if (fieldType.Equals(typeof(Task)) || fieldType.IsSubclassOf(typeof(Task)))
                 {
                     if (TaskUtility.HasAttribute(allFields[i], typeof(InspectTaskAttribute)))
                     {
                         Dictionary <string, object> dictionary = obj2 as Dictionary <string, object>;
                         Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(dictionary["Type"] as string);
                         if (typeWithinAssembly != null)
                         {
                             Task task2 = TaskUtility.CreateInstance(typeWithinAssembly) as Task;
                             JSONDeserialization.DeserializeObject(task2, task2, dictionary, variableSource, unityObjects);
                             allFields[i].SetValue(task, task2);
                         }
                     }
                     else if (JSONDeserialization.taskIDs != null)
                     {
                         List <int> list4 = new List <int>();
                         list4.Add(Convert.ToInt32(obj2));
                         JSONDeserialization.taskIDs.Add(new JSONDeserialization.TaskField(task, allFields[i]), list4);
                     }
                 }
                 else
                 {
                     allFields[i].SetValue(obj, JSONDeserialization.ValueToObject(task, fieldType, obj2, variableSource, unityObjects));
                 }
             }
         }
         else if (typeof(SharedVariable).IsAssignableFrom(allFields[i].FieldType) && !allFields[i].FieldType.IsAbstract)
         {
             if (dict.TryGetValue((allFields[i].FieldType.Name.GetHashCode() + allFields[i].Name.GetHashCode()).ToString(), out obj2))
             {
                 SharedVariable sharedVariable = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable;
                 sharedVariable.SetValue(JSONDeserialization.ValueToObject(task, allFields[i].FieldType, obj2, variableSource, unityObjects));
                 allFields[i].SetValue(obj, sharedVariable);
             }
             else
             {
                 SharedVariable sharedVariable2 = TaskUtility.CreateInstance(allFields[i].FieldType) as SharedVariable;
                 SharedVariable sharedVariable3 = allFields[i].GetValue(obj) as SharedVariable;
                 if (sharedVariable3 != null)
                 {
                     sharedVariable2.SetValue(sharedVariable3.GetValue());
                 }
                 allFields[i].SetValue(obj, sharedVariable2);
             }
         }
     }
 }
Ejemplo n.º 8
0
        // Token: 0x0600015B RID: 347 RVA: 0x0000C490 File Offset: 0x0000A690
        private static SharedVariable DeserializeSharedVariable(Dictionary <string, object> dict, IVariableSource variableSource, bool fromSource, List <UnityEngine.Object> unityObjects)
        {
            if (dict == null)
            {
                return(null);
            }
            SharedVariable sharedVariable = null;
            object         obj;

            if (!fromSource && variableSource != null && dict.TryGetValue("Name", out obj))
            {
                object value;
                dict.TryGetValue("IsGlobal", out value);
                if (!dict.TryGetValue("IsGlobal", out value) || !Convert.ToBoolean(value))
                {
                    sharedVariable = variableSource.GetVariable(obj as string);
                }
                else
                {
                    if (JSONDeserialization.globalVariables == null)
                    {
                        JSONDeserialization.globalVariables = GlobalVariables.Instance;
                    }
                    if (JSONDeserialization.globalVariables != null)
                    {
                        sharedVariable = JSONDeserialization.globalVariables.GetVariable(obj as string);
                    }
                }
            }
            Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(dict["Type"] as string);

            if (typeWithinAssembly == null)
            {
                return(null);
            }
            bool flag = true;

            if (sharedVariable == null || !(flag = sharedVariable.GetType().Equals(typeWithinAssembly)))
            {
                sharedVariable      = (TaskUtility.CreateInstance(typeWithinAssembly) as SharedVariable);
                sharedVariable.Name = (dict["Name"] as string);
                object obj2;
                if (dict.TryGetValue("IsShared", out obj2))
                {
                    sharedVariable.IsShared = Convert.ToBoolean(obj2);
                }
                if (dict.TryGetValue("IsGlobal", out obj2))
                {
                    sharedVariable.IsGlobal = Convert.ToBoolean(obj2);
                }
                if (dict.TryGetValue("NetworkSync", out obj2))
                {
                    sharedVariable.NetworkSync = Convert.ToBoolean(obj2);
                }
                if (!sharedVariable.IsGlobal && dict.TryGetValue("PropertyMapping", out obj2))
                {
                    sharedVariable.PropertyMapping = (obj2 as string);
                    if (dict.TryGetValue("PropertyMappingOwner", out obj2))
                    {
                        sharedVariable.PropertyMappingOwner = (JSONDeserialization.IndexToUnityObject(Convert.ToInt32(obj2), unityObjects) as GameObject);
                    }
                    sharedVariable.InitializePropertyMapping(variableSource as BehaviorSource);
                }
                if (!flag)
                {
                    sharedVariable.IsShared = true;
                }
                JSONDeserialization.DeserializeObject(null, sharedVariable, dict, variableSource, unityObjects);
            }
            return(sharedVariable);
        }
Ejemplo n.º 9
0
        // Token: 0x06000159 RID: 345 RVA: 0x0000C0A0 File Offset: 0x0000A2A0
        public static Task DeserializeTask(BehaviorSource behaviorSource, Dictionary <string, object> dict, ref Dictionary <int, Task> IDtoTask, List <UnityEngine.Object> unityObjects)
        {
            Task task = null;

            try
            {
                Type type = TaskUtility.GetTypeWithinAssembly(dict["Type"] as string);
                if (type == null)
                {
                    if (dict.ContainsKey("Children"))
                    {
                        type = typeof(UnknownParentTask);
                    }
                    else
                    {
                        type = typeof(UnknownTask);
                    }
                }
                task = (TaskUtility.CreateInstance(type) as Task);
                if (task is UnknownTask)
                {
                    UnknownTask unknownTask = task as UnknownTask;
                    unknownTask.JSONSerialization = MiniJSON.Serialize(dict);
                }
            }
            catch (Exception)
            {
            }
            if (task == null)
            {
                return(null);
            }
            task.Owner = (behaviorSource.Owner.GetObject() as Behavior);
            task.ID    = Convert.ToInt32(dict["ID"]);
            object obj;

            if (dict.TryGetValue("Name", out obj))
            {
                task.FriendlyName = (string)obj;
            }
            if (dict.TryGetValue("Instant", out obj))
            {
                task.IsInstant = Convert.ToBoolean(obj);
            }
            if (dict.TryGetValue("Disabled", out obj))
            {
                task.Disabled = Convert.ToBoolean(obj);
            }
            IDtoTask.Add(task.ID, task);
            task.NodeData = JSONDeserialization.DeserializeNodeData(dict["NodeData"] as Dictionary <string, object>, task);
            if (task.GetType().Equals(typeof(UnknownTask)) || task.GetType().Equals(typeof(UnknownParentTask)))
            {
                if (!task.FriendlyName.Contains("Unknown "))
                {
                    task.FriendlyName = string.Format("Unknown {0}", task.FriendlyName);
                }
                task.NodeData.Comment = "Unknown Task. Right click and Replace to locate new task.";
            }
            JSONDeserialization.DeserializeObject(task, task, dict, behaviorSource, unityObjects);
            if (task is ParentTask && dict.TryGetValue("Children", out obj))
            {
                ParentTask parentTask = task as ParentTask;
                if (parentTask != null)
                {
                    foreach (object obj2 in (obj as IEnumerable))
                    {
                        Dictionary <string, object> dict2 = (Dictionary <string, object>)obj2;
                        Task child = JSONDeserialization.DeserializeTask(behaviorSource, dict2, ref IDtoTask, unityObjects);
                        int  index = (parentTask.Children != null) ? parentTask.Children.Count : 0;
                        parentTask.AddChild(child, index);
                    }
                }
            }
            return(task);
        }
Ejemplo n.º 10
0
        // Token: 0x06000156 RID: 342 RVA: 0x0000BBB0 File Offset: 0x00009DB0
        public static void Load(TaskSerializationData taskData, BehaviorSource behaviorSource)
        {
            if (taskData != null && string.IsNullOrEmpty(taskData.Version))
            {
                JSONDeserializationDeprecated.Load(taskData, behaviorSource);
                return;
            }
            behaviorSource.EntryTask     = null;
            behaviorSource.RootTask      = null;
            behaviorSource.DetachedTasks = null;
            behaviorSource.Variables     = null;
            Dictionary <string, object> dictionary;

            if (!JSONDeserialization.serializationCache.TryGetValue(taskData.JSONSerialization.GetHashCode(), out dictionary))
            {
                dictionary = (MiniJSON.Deserialize(taskData.JSONSerialization) as Dictionary <string, object>);
                JSONDeserialization.serializationCache.Add(taskData.JSONSerialization.GetHashCode(), dictionary);
            }
            if (dictionary == null)
            {
                Debug.Log("Failed to deserialize");
                return;
            }
            JSONDeserialization.taskIDs = new Dictionary <JSONDeserialization.TaskField, List <int> >();
            JSONDeserialization.updatedSerialization = (taskData.Version.CompareTo("1.5.7") >= 0);
            Dictionary <int, Task> dictionary2 = new Dictionary <int, Task>();

            JSONDeserialization.DeserializeVariables(behaviorSource, dictionary, taskData.fieldSerializationData.unityObjects);
            if (dictionary.ContainsKey("EntryTask"))
            {
                behaviorSource.EntryTask = JSONDeserialization.DeserializeTask(behaviorSource, dictionary["EntryTask"] as Dictionary <string, object>, ref dictionary2, taskData.fieldSerializationData.unityObjects);
            }
            if (dictionary.ContainsKey("RootTask"))
            {
                behaviorSource.RootTask = JSONDeserialization.DeserializeTask(behaviorSource, dictionary["RootTask"] as Dictionary <string, object>, ref dictionary2, taskData.fieldSerializationData.unityObjects);
            }
            if (dictionary.ContainsKey("DetachedTasks"))
            {
                List <Task> list = new List <Task>();
                foreach (object obj in (dictionary["DetachedTasks"] as IEnumerable))
                {
                    Dictionary <string, object> dict = (Dictionary <string, object>)obj;
                    list.Add(JSONDeserialization.DeserializeTask(behaviorSource, dict, ref dictionary2, taskData.fieldSerializationData.unityObjects));
                }
                behaviorSource.DetachedTasks = list;
            }
            if (JSONDeserialization.taskIDs != null && JSONDeserialization.taskIDs.Count > 0)
            {
                foreach (JSONDeserialization.TaskField key in JSONDeserialization.taskIDs.Keys)
                {
                    List <int> list2     = JSONDeserialization.taskIDs[key];
                    Type       fieldType = key.fieldInfo.FieldType;
                    if (key.fieldInfo.FieldType.IsArray)
                    {
                        int num = 0;
                        for (int i = 0; i < list2.Count; i++)
                        {
                            Task task = dictionary2[list2[i]];
                            if (task.GetType().Equals(fieldType.GetElementType()) || task.GetType().IsSubclassOf(fieldType.GetElementType()))
                            {
                                num++;
                            }
                        }
                        Array array = Array.CreateInstance(fieldType.GetElementType(), num);
                        int   num2  = 0;
                        for (int j = 0; j < list2.Count; j++)
                        {
                            Task task2 = dictionary2[list2[j]];
                            if (task2.GetType().Equals(fieldType.GetElementType()) || task2.GetType().IsSubclassOf(fieldType.GetElementType()))
                            {
                                array.SetValue(task2, num2);
                                num2++;
                            }
                        }
                        key.fieldInfo.SetValue(key.task, array);
                    }
                    else
                    {
                        Task task3 = dictionary2[list2[0]];
                        if (task3.GetType().Equals(key.fieldInfo.FieldType) || task3.GetType().IsSubclassOf(key.fieldInfo.FieldType))
                        {
                            key.fieldInfo.SetValue(key.task, task3);
                        }
                    }
                }
                JSONDeserialization.taskIDs = null;
            }
        }