private static object ValueToObject(Task task, Type type, object obj, IVariableSource variableSource, List <UnityEngine.Object> unityObjects) { if (type.Equals(typeof(SharedVariable)) || type.IsSubclassOf(typeof(SharedVariable))) { SharedVariable sharedVariable = DeserializeJSON.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(DeserializeJSON.IndexToUnityObject(Convert.ToInt32(obj), unityObjects)); } if (!type.IsPrimitive) { if (!type.Equals(typeof(string))) { goto IL_C5; } } try { object result = Convert.ChangeType(obj, type); return(result); } catch (Exception) { object result = null; return(result); } IL_C5: if (type.IsSubclassOf(typeof(Enum))) { try { object result = Enum.Parse(type, (string)obj); return(result); } catch (Exception) { object result = null; return(result); } } if (type.Equals(typeof(Vector2))) { return(DeserializeJSON.StringToVector2((string)obj)); } if (type.Equals(typeof(Vector3))) { return(DeserializeJSON.StringToVector3((string)obj)); } if (type.Equals(typeof(Vector4))) { return(DeserializeJSON.StringToVector4((string)obj)); } if (type.Equals(typeof(Quaternion))) { return(DeserializeJSON.StringToQuaternion((string)obj)); } if (type.Equals(typeof(Matrix4x4))) { return(DeserializeJSON.StringToMatrix4x4((string)obj)); } if (type.Equals(typeof(Color))) { return(DeserializeJSON.StringToColor((string)obj)); } if (type.Equals(typeof(Rect))) { return(DeserializeJSON.StringToRect((string)obj)); } if (type.Equals(typeof(LayerMask))) { return(DeserializeJSON.ValueToLayerMask(Convert.ToInt32(obj))); } if (type.Equals(typeof(AnimationCurve))) { return(DeserializeJSON.ValueToAnimationCurve((Dictionary <string, object>)obj)); } object obj2 = TaskUtility.CreateInstance(type); DeserializeJSON.DeserializeObject(task, obj2, obj as Dictionary <string, object>, variableSource, unityObjects); return(obj2); }
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 (DeserializeJSON.globalVariables == null) { DeserializeJSON.globalVariables = GlobalVariables.Instance; } if (DeserializeJSON.globalVariables != null) { sharedVariable = DeserializeJSON.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 = (DeserializeJSON.IndexToUnityObject(Convert.ToInt32(obj2), unityObjects) as GameObject); } sharedVariable.InitializePropertyMapping(variableSource as BehaviorSource); } if (!flag) { sharedVariable.IsShared = true; } DeserializeJSON.DeserializeObject(null, sharedVariable, dict, variableSource, unityObjects); } return(sharedVariable); }