Пример #1
0
    // Token: 0x06000106 RID: 262 RVA: 0x00009F04 File Offset: 0x00008104
    public static void Load(GlobalVariables globalVariables)
    {
        if (globalVariables == null)
        {
            return;
        }
        globalVariables.Variables = null;
        FieldSerializationData fieldSerializationData;

        if (globalVariables.VariableData == null || (fieldSerializationData = globalVariables.VariableData.fieldSerializationData).byteData == null || fieldSerializationData.byteData.Count == 0)
        {
            return;
        }
        VariableSerializationData variableData = globalVariables.VariableData;

        fieldSerializationData.byteDataArray = fieldSerializationData.byteData.ToArray();
        if (variableData.variableStartIndex != null)
        {
            List <SharedVariable>    list       = new List <SharedVariable>();
            Dictionary <string, int> dictionary = ObjectPool.Get <Dictionary <string, int> >();
            for (int i = 0; i < variableData.variableStartIndex.Count; i++)
            {
                int num = variableData.variableStartIndex[i];
                int num2;
                if (i + 1 < variableData.variableStartIndex.Count)
                {
                    num2 = variableData.variableStartIndex[i + 1];
                }
                else
                {
                    num2 = fieldSerializationData.startIndex.Count;
                }
                dictionary.Clear();
                for (int j = num; j < num2; j++)
                {
                    dictionary.Add(fieldSerializationData.typeName[j], fieldSerializationData.startIndex[j]);
                }
                SharedVariable sharedVariable = BinaryDeserializationDeprecated.BytesToSharedVariable(fieldSerializationData, dictionary, fieldSerializationData.byteDataArray, variableData.variableStartIndex[i], globalVariables, false, string.Empty);
                if (sharedVariable != null)
                {
                    list.Add(sharedVariable);
                }
            }
            ObjectPool.Return <Dictionary <string, int> >(dictionary);
            globalVariables.Variables = list;
        }
    }
Пример #2
0
    // Token: 0x0600010A RID: 266 RVA: 0x0000A5B4 File Offset: 0x000087B4
    private static object LoadField(FieldSerializationData fieldSerializationData, Dictionary <string, int> fieldIndexMap, Type fieldType, string fieldName, IVariableSource variableSource, object obj = null, FieldInfo fieldInfo = null)
    {
        string text = fieldType.Name + fieldName;
        int    num;

        if (fieldIndexMap.TryGetValue(text, out num))
        {
            object obj2 = null;
            if (typeof(IList).IsAssignableFrom(fieldType))
            {
                int num2 = BinaryDeserializationDeprecated.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
                if (fieldType.IsArray)
                {
                    Type elementType = fieldType.GetElementType();
                    if (elementType == null)
                    {
                        return(null);
                    }
                    Array array = Array.CreateInstance(elementType, num2);
                    for (int i = 0; i < num2; i++)
                    {
                        object obj3 = BinaryDeserializationDeprecated.LoadField(fieldSerializationData, fieldIndexMap, elementType, text + i, variableSource, obj, fieldInfo);
                        array.SetValue((!object.ReferenceEquals(obj3, null) && !obj3.Equals(null)) ? obj3 : null, i);
                    }
                    obj2 = array;
                }
                else
                {
                    Type type = fieldType;
                    while (!type.IsGenericType)
                    {
                        type = type.BaseType;
                    }
                    Type  type2 = type.GetGenericArguments()[0];
                    IList list;
                    if (fieldType.IsGenericType)
                    {
                        list = (TaskUtility.CreateInstance(typeof(List <>).MakeGenericType(new Type[]
                        {
                            type2
                        })) as IList);
                    }
                    else
                    {
                        list = (TaskUtility.CreateInstance(fieldType) as IList);
                    }
                    for (int j = 0; j < num2; j++)
                    {
                        object obj4 = BinaryDeserializationDeprecated.LoadField(fieldSerializationData, fieldIndexMap, type2, text + j, variableSource, obj, fieldInfo);
                        list.Add((!object.ReferenceEquals(obj4, null) && !obj4.Equals(null)) ? obj4 : null);
                    }
                    obj2 = list;
                }
            }
            else if (typeof(Task).IsAssignableFrom(fieldType))
            {
                if (fieldInfo != null && TaskUtility.HasAttribute(fieldInfo, typeof(InspectTaskAttribute)))
                {
                    string text2 = BinaryDeserializationDeprecated.BytesToString(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num], BinaryDeserializationDeprecated.GetFieldSize(fieldSerializationData, num));
                    if (!string.IsNullOrEmpty(text2))
                    {
                        Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(text2);
                        if (typeWithinAssembly != null)
                        {
                            obj2 = TaskUtility.CreateInstance(typeWithinAssembly);
                            BinaryDeserializationDeprecated.LoadFields(fieldSerializationData, fieldIndexMap, obj2, text, variableSource);
                        }
                    }
                }
                else
                {
                    if (BinaryDeserializationDeprecated.taskIDs == null)
                    {
                        BinaryDeserializationDeprecated.taskIDs = new Dictionary <BinaryDeserializationDeprecated.ObjectFieldMap, List <int> >(new BinaryDeserializationDeprecated.ObjectFieldMapComparer());
                    }
                    int item = BinaryDeserializationDeprecated.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
                    BinaryDeserializationDeprecated.ObjectFieldMap key = new BinaryDeserializationDeprecated.ObjectFieldMap(obj, fieldInfo);
                    if (BinaryDeserializationDeprecated.taskIDs.ContainsKey(key))
                    {
                        BinaryDeserializationDeprecated.taskIDs[key].Add(item);
                    }
                    else
                    {
                        List <int> list2 = new List <int>();
                        list2.Add(item);
                        BinaryDeserializationDeprecated.taskIDs.Add(key, list2);
                    }
                }
            }
            else if (typeof(SharedVariable).IsAssignableFrom(fieldType))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToSharedVariable(fieldSerializationData, fieldIndexMap, fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num], variableSource, true, text);
            }
            else if (typeof(UnityEngine.Object).IsAssignableFrom(fieldType))
            {
                int index = BinaryDeserializationDeprecated.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
                obj2 = BinaryDeserializationDeprecated.IndexToUnityObject(index, fieldSerializationData);
            }
            else if (fieldType.Equals(typeof(int)) || fieldType.IsEnum)
            {
                obj2 = BinaryDeserializationDeprecated.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(uint)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToUInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(float)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToFloat(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(double)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToDouble(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(long)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToLong(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(bool)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToBool(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(string)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToString(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num], BinaryDeserializationDeprecated.GetFieldSize(fieldSerializationData, num));
            }
            else if (fieldType.Equals(typeof(byte)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToByte(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Vector2)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToVector2(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Vector3)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToVector3(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Vector4)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToVector4(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Quaternion)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToQuaternion(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Color)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToColor(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Rect)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToRect(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(Matrix4x4)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToMatrix4x4(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(AnimationCurve)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToAnimationCurve(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.Equals(typeof(LayerMask)))
            {
                obj2 = BinaryDeserializationDeprecated.BytesToLayerMask(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num]);
            }
            else if (fieldType.IsClass || (fieldType.IsValueType && !fieldType.IsPrimitive))
            {
                obj2 = TaskUtility.CreateInstance(fieldType);
                BinaryDeserializationDeprecated.LoadFields(fieldSerializationData, fieldIndexMap, obj2, text, variableSource);
                return(obj2);
            }
            return(obj2);
        }
        if (fieldType.IsAbstract)
        {
            return(null);
        }
        if (typeof(SharedVariable).IsAssignableFrom(fieldType))
        {
            return(TaskUtility.CreateInstance(fieldType));
        }
        return(null);
    }
Пример #3
0
    // Token: 0x06000105 RID: 261 RVA: 0x00009A58 File Offset: 0x00007C58
    public static void Load(TaskSerializationData taskData, BehaviorSource behaviorSource)
    {
        behaviorSource.EntryTask     = null;
        behaviorSource.RootTask      = null;
        behaviorSource.DetachedTasks = null;
        behaviorSource.Variables     = null;
        FieldSerializationData fieldSerializationData;

        if (taskData == null || (fieldSerializationData = taskData.fieldSerializationData).byteData == null || fieldSerializationData.byteData.Count == 0)
        {
            return;
        }
        fieldSerializationData.byteDataArray    = fieldSerializationData.byteData.ToArray();
        BinaryDeserializationDeprecated.taskIDs = null;
        if (taskData.variableStartIndex != null)
        {
            List <SharedVariable>    list       = new List <SharedVariable>();
            Dictionary <string, int> dictionary = ObjectPool.Get <Dictionary <string, int> >();
            for (int i = 0; i < taskData.variableStartIndex.Count; i++)
            {
                int num = taskData.variableStartIndex[i];
                int num2;
                if (i + 1 < taskData.variableStartIndex.Count)
                {
                    num2 = taskData.variableStartIndex[i + 1];
                }
                else if (taskData.startIndex != null && taskData.startIndex.Count > 0)
                {
                    num2 = taskData.startIndex[0];
                }
                else
                {
                    num2 = fieldSerializationData.startIndex.Count;
                }
                dictionary.Clear();
                for (int j = num; j < num2; j++)
                {
                    dictionary.Add(fieldSerializationData.typeName[j], fieldSerializationData.startIndex[j]);
                }
                SharedVariable sharedVariable = BinaryDeserializationDeprecated.BytesToSharedVariable(fieldSerializationData, dictionary, fieldSerializationData.byteDataArray, taskData.variableStartIndex[i], behaviorSource, false, string.Empty);
                if (sharedVariable != null)
                {
                    list.Add(sharedVariable);
                }
            }
            ObjectPool.Return <Dictionary <string, int> >(dictionary);
            behaviorSource.Variables = list;
        }
        List <Task> list2 = new List <Task>();

        if (taskData.types != null)
        {
            for (int k = 0; k < taskData.types.Count; k++)
            {
                BinaryDeserializationDeprecated.LoadTask(taskData, fieldSerializationData, ref list2, ref behaviorSource);
            }
        }
        if (taskData.parentIndex.Count != list2.Count)
        {
            Debug.LogError("Deserialization Error: parent index count does not match task list count");
            return;
        }
        for (int l = 0; l < taskData.parentIndex.Count; l++)
        {
            if (taskData.parentIndex[l] == -1)
            {
                if (behaviorSource.EntryTask == null)
                {
                    behaviorSource.EntryTask = list2[l];
                }
                else
                {
                    if (behaviorSource.DetachedTasks == null)
                    {
                        behaviorSource.DetachedTasks = new List <Task>();
                    }
                    behaviorSource.DetachedTasks.Add(list2[l]);
                }
            }
            else if (taskData.parentIndex[l] == 0)
            {
                behaviorSource.RootTask = list2[l];
            }
            else if (taskData.parentIndex[l] != -1)
            {
                ParentTask parentTask = list2[taskData.parentIndex[l]] as ParentTask;
                if (parentTask != null)
                {
                    int index = (parentTask.Children != null) ? parentTask.Children.Count : 0;
                    parentTask.AddChild(list2[l], index);
                }
            }
        }
        if (BinaryDeserializationDeprecated.taskIDs != null)
        {
            foreach (BinaryDeserializationDeprecated.ObjectFieldMap objectFieldMap in BinaryDeserializationDeprecated.taskIDs.Keys)
            {
                List <int> list3     = BinaryDeserializationDeprecated.taskIDs[objectFieldMap];
                Type       fieldType = objectFieldMap.fieldInfo.FieldType;
                if (typeof(IList).IsAssignableFrom(fieldType))
                {
                    if (fieldType.IsArray)
                    {
                        Type  elementType = fieldType.GetElementType();
                        Array array       = Array.CreateInstance(elementType, list3.Count);
                        for (int m = 0; m < array.Length; m++)
                        {
                            array.SetValue(list2[list3[m]], m);
                        }
                        objectFieldMap.fieldInfo.SetValue(objectFieldMap.obj, array);
                    }
                    else
                    {
                        Type  type  = fieldType.GetGenericArguments()[0];
                        IList list4 = TaskUtility.CreateInstance(typeof(List <>).MakeGenericType(new Type[]
                        {
                            type
                        })) as IList;
                        for (int n = 0; n < list3.Count; n++)
                        {
                            list4.Add(list2[list3[n]]);
                        }
                        objectFieldMap.fieldInfo.SetValue(objectFieldMap.obj, list4);
                    }
                }
                else
                {
                    objectFieldMap.fieldInfo.SetValue(objectFieldMap.obj, list2[list3[0]]);
                }
            }
        }
    }