/*
         * 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];
                 }
             }
         }
     }
 }
Beispiel #3
0
 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];
						}
					}
				}
			}
		}