/* * Matrix4x4 */ public static JSONObject FromMatrix4x4(Matrix4x4 m) { JSONObject mdata = JSONObject.obj; if (m.m00 != 0) { mdata.AddField("m00", m.m00); } if (m.m01 != 0) { mdata.AddField("m01", m.m01); } if (m.m02 != 0) { mdata.AddField("m02", m.m02); } if (m.m03 != 0) { mdata.AddField("m03", m.m03); } if (m.m10 != 0) { mdata.AddField("m10", m.m10); } if (m.m11 != 0) { mdata.AddField("m11", m.m11); } if (m.m12 != 0) { mdata.AddField("m12", m.m12); } if (m.m13 != 0) { mdata.AddField("m13", m.m13); } if (m.m20 != 0) { mdata.AddField("m20", m.m20); } if (m.m21 != 0) { mdata.AddField("m21", m.m21); } if (m.m22 != 0) { mdata.AddField("m22", m.m22); } if (m.m23 != 0) { mdata.AddField("m23", m.m23); } if (m.m30 != 0) { mdata.AddField("m30", m.m30); } if (m.m31 != 0) { mdata.AddField("m31", m.m31); } if (m.m32 != 0) { mdata.AddField("m32", m.m32); } if (m.m33 != 0) { mdata.AddField("m33", m.m33); } return(mdata); }
/// <summary> /// Merge object right into left recursively /// </summary> /// <param name="left">The left (base) object</param> /// <param name="right">The right (new) object</param> static void MergeRecur(JSONObject left, JSONObject right) { if (left.type == Type.NULL) { left.Absorb(right); } else if (left.type == Type.OBJECT && right.type == Type.OBJECT) { for (int i = 0; i < right.list.Count; i++) { string key = right.keys[i]; if (right[i].isContainer) { if (left.HasField(key)) { MergeRecur(left[key], right[i]); } else { left.AddField(key, right[i]); } } else { if (left.HasField(key)) { left.SetField(key, right[i]); } else { left.AddField(key, right[i]); } } } } else if (left.type == Type.ARRAY && right.type == Type.ARRAY) { if (right.Count > left.Count) { if (UnityEngine.UI.Windows.Constants.LOGS_ENABLED == true) { UnityEngine.Debug.LogError("Cannot merge arrays when right object has more elements"); } return; } for (int i = 0; i < right.list.Count; i++) { if (left[i].type == right[i].type) //Only overwrite with the same type { if (left[i].isContainer) { MergeRecur(left[i], right[i]); } else { left[i] = right[i]; } } } } }
public static JSONObject TOJSON(object obj) //For a generic guess { if (touched.Add(obj)) { JSONObject result = JSONObject.obj; //Fields FieldInfo[] fieldinfo = obj.GetType().GetFields(); foreach (FieldInfo fi in fieldinfo) { JSONObject val = JSONObject.nullJO; if (!fi.GetValue(obj).Equals(null)) { MethodInfo info = typeof(JSONTemplates).GetMethod("From" + fi.FieldType.Name); if (info != null) { object[] parms = new object[1]; parms[0] = fi.GetValue(obj); val = (JSONObject)info.Invoke(null, parms); } else if (fi.FieldType == typeof(string)) { val = JSONObject.CreateStringObject(fi.GetValue(obj).ToString()); } else { val = JSONObject.Create(fi.GetValue(obj).ToString()); } } if (val) { if (val.type != JSONObject.Type.NULL) { result.AddField(fi.Name, val); } else if (UnityEngine.UI.Windows.Constants.LOGS_ENABLED == true) { UnityEngine.Debug.LogWarning("Null for this non-null object, property " + fi.Name + " of class " + obj.GetType().Name + ". Object type is " + fi.FieldType.Name); } } } //Properties PropertyInfo[] propertyInfo = obj.GetType().GetProperties(); foreach (PropertyInfo pi in propertyInfo) { //This section should mirror part of AssetFactory.AddScripts() JSONObject val = JSONObject.nullJO; if (!pi.GetValue(obj, null).Equals(null)) { MethodInfo info = typeof(JSONTemplates).GetMethod("From" + pi.PropertyType.Name); if (info != null) { object[] parms = new object[1]; parms[0] = pi.GetValue(obj, null); val = (JSONObject)info.Invoke(null, parms); } else if (pi.PropertyType == typeof(string)) { val = JSONObject.CreateStringObject(pi.GetValue(obj, null).ToString()); } else { val = JSONObject.Create(pi.GetValue(obj, null).ToString()); } } if (val) { if (val.type != JSONObject.Type.NULL) { result.AddField(pi.Name, val); } else if (UnityEngine.UI.Windows.Constants.LOGS_ENABLED == true) { UnityEngine.Debug.LogWarning("Null for this non-null object, property " + pi.Name + " of class " + obj.GetType().Name + ". Object type is " + pi.PropertyType.Name); } } } return(result); } if (UnityEngine.UI.Windows.Constants.LOGS_ENABLED == true) { UnityEngine.Debug.LogWarning("trying to save the same data twice"); } return(JSONObject.nullJO); }
/// <summary> /// Merge object right into left recursively /// </summary> /// <param name="left">The left (base) object</param> /// <param name="right">The right (new) object</param> static void MergeRecur(JSONObject left, JSONObject right) { if(left.type == Type.NULL) left.Absorb(right); else if(left.type == Type.OBJECT && right.type == Type.OBJECT) { for(int i = 0; i < right.list.Count; i++) { string key = right.keys[i]; if(right[i].isContainer) { if(left.HasField(key)) MergeRecur(left[key], right[i]); else left.AddField(key, right[i]); } else { if(left.HasField(key)) left.SetField(key, right[i]); else left.AddField(key, right[i]); } } } else if(left.type == Type.ARRAY && right.type == Type.ARRAY) { if(right.Count > left.Count) { Debug.LogError("Cannot merge arrays when right object has more elements"); return; } for(int i = 0; i < right.list.Count; i++) { if(left[i].type == right[i].type) { //Only overwrite with the same type if(left[i].isContainer) MergeRecur(left[i], right[i]); else { left[i] = right[i]; } } } } }