private static LayerMask BytesToLayerMask(byte[] bytes, int dataPosition) { LayerMask result = default(LayerMask); result.value = BinaryDeserialization.BytesToInt(bytes, dataPosition); return(result); }
private static LayerMask BytesToLayerMask(byte[] bytes, int dataPosition) { return(new LayerMask { value = BinaryDeserialization.BytesToInt(bytes, dataPosition) }); }
private static object LoadField(FieldSerializationData fieldSerializationData, Dictionary <int, int> fieldIndexMap, Type fieldType, string fieldName, int hashPrefix, IVariableSource variableSource, object obj = null, FieldInfo fieldInfo = null) { int num; if (BinaryDeserialization.shaHashSerialization) { num = hashPrefix + (BinaryDeserialization.StringHash(fieldType.Name.ToString()) + BinaryDeserialization.StringHash(fieldName)); } else { num = hashPrefix + (fieldType.Name.GetHashCode() + fieldName.GetHashCode()); } int num2; if (fieldIndexMap.TryGetValue(num, out num2)) { object obj2 = null; if (typeof(IList).IsAssignableFrom(fieldType)) { int num3 = BinaryDeserialization.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); if (fieldType.IsArray) { Type elementType = fieldType.GetElementType(); if (elementType == null) { return(null); } Array array = Array.CreateInstance(elementType, num3); for (int i = 0; i < num3; i++) { object obj3 = BinaryDeserialization.LoadField(fieldSerializationData, fieldIndexMap, elementType, i.ToString(), num / ((!BinaryDeserialization.updatedSerialization) ? 1 : (i + 1)), 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 < num3; j++) { object obj4 = BinaryDeserialization.LoadField(fieldSerializationData, fieldIndexMap, type2, j.ToString(), num / ((!BinaryDeserialization.updatedSerialization) ? 1 : (j + 1)), 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 text = BinaryDeserialization.BytesToString(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2], BinaryDeserialization.GetFieldSize(fieldSerializationData, num2)); if (!string.IsNullOrEmpty(text)) { Type typeWithinAssembly = TaskUtility.GetTypeWithinAssembly(text); if (typeWithinAssembly != null) { obj2 = TaskUtility.CreateInstance(typeWithinAssembly); BinaryDeserialization.LoadFields(fieldSerializationData, fieldIndexMap, obj2, num, variableSource); } } } else { if (BinaryDeserialization.taskIDs == null) { BinaryDeserialization.taskIDs = new Dictionary <BinaryDeserialization.ObjectFieldMap, List <int> >(new BinaryDeserialization.ObjectFieldMapComparer()); } int item = BinaryDeserialization.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); BinaryDeserialization.ObjectFieldMap key = new BinaryDeserialization.ObjectFieldMap(obj, fieldInfo); if (BinaryDeserialization.taskIDs.ContainsKey(key)) { BinaryDeserialization.taskIDs[key].Add(item); } else { List <int> list2 = new List <int>(); list2.Add(item); BinaryDeserialization.taskIDs.Add(key, list2); } } } else if (typeof(SharedVariable).IsAssignableFrom(fieldType)) { obj2 = BinaryDeserialization.BytesToSharedVariable(fieldSerializationData, fieldIndexMap, fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2], variableSource, true, num); } else if (typeof(UnityEngine.Object).IsAssignableFrom(fieldType)) { int index = BinaryDeserialization.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); obj2 = BinaryDeserialization.IndexToUnityObject(index, fieldSerializationData); } else if (fieldType.Equals(typeof(int)) || fieldType.IsEnum) { obj2 = BinaryDeserialization.BytesToInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(uint))) { obj2 = BinaryDeserialization.BytesToUInt(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(float))) { obj2 = BinaryDeserialization.BytesToFloat(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(double))) { obj2 = BinaryDeserialization.BytesToDouble(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(long))) { obj2 = BinaryDeserialization.BytesToLong(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(bool))) { obj2 = BinaryDeserialization.BytesToBool(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(string))) { obj2 = BinaryDeserialization.BytesToString(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2], BinaryDeserialization.GetFieldSize(fieldSerializationData, num2)); } else if (fieldType.Equals(typeof(byte))) { obj2 = BinaryDeserialization.BytesToByte(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Vector2))) { obj2 = BinaryDeserialization.BytesToVector2(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Vector3))) { obj2 = BinaryDeserialization.BytesToVector3(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Vector4))) { obj2 = BinaryDeserialization.BytesToVector4(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Quaternion))) { obj2 = BinaryDeserialization.BytesToQuaternion(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Color))) { obj2 = BinaryDeserialization.BytesToColor(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Rect))) { obj2 = BinaryDeserialization.BytesToRect(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(Matrix4x4))) { obj2 = BinaryDeserialization.BytesToMatrix4x4(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(AnimationCurve))) { obj2 = BinaryDeserialization.BytesToAnimationCurve(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.Equals(typeof(LayerMask))) { obj2 = BinaryDeserialization.BytesToLayerMask(fieldSerializationData.byteDataArray, fieldSerializationData.dataPosition[num2]); } else if (fieldType.IsClass || (fieldType.IsValueType && !fieldType.IsPrimitive)) { obj2 = TaskUtility.CreateInstance(fieldType); BinaryDeserialization.LoadFields(fieldSerializationData, fieldIndexMap, obj2, num, variableSource); return(obj2); } return(obj2); } if (fieldType.IsAbstract) { return(null); } if (typeof(SharedVariable).IsAssignableFrom(fieldType)) { SharedVariable sharedVariable = TaskUtility.CreateInstance(fieldType) as SharedVariable; SharedVariable sharedVariable2 = fieldInfo.GetValue(obj) as SharedVariable; if (sharedVariable2 != null) { sharedVariable.SetValue(sharedVariable2.GetValue()); } return(sharedVariable); } return(null); }