public static ConfigNodeObjectGUI FromObject(ConfigNodeObject o)
        {
            var gui = new ConfigNodeObjectGUI();

            gui.SetObject(o);
            return(gui);
        }
 void SetObject(ConfigNodeObject o)
 {
     obj  = o;
     name = Utils.ParseCamelCase(obj.GetType().Name);
     foreach (var fi in o.GetType()
              .GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy)
              .Where(f => f.GetCustomAttributes(typeof(Persistent), true).Length > 0))
     {
         if (typeof(ConfigNodeObject).IsAssignableFrom(fi.FieldType))
         {
             var child = fi.GetValue(obj) as ConfigNodeObject;
             if (child != null)
             {
                 var gui = ConfigNodeObjectGUI.FromObject(child);
                 gui.parent = this;
                 gui.name   = fi.Name;
                 children.Add(gui);
             }
         }
         else
         {
             if (fi.FieldType == typeof(bool))
             {
                 fields.Add(new BoolUI(fi, obj));
             }
             else if (fi.FieldType == typeof(string))
             {
                 fields.Add(new StringUI(fi, obj));
             }
             else if (fi.FieldType == typeof(int))
             {
                 fields.Add(new IntUI(fi, obj));
             }
             else if (fi.FieldType == typeof(float))
             {
                 fields.Add(new FloatUI(fi, obj));
             }
             else if (fi.FieldType == typeof(Vector3))
             {
                 fields.Add(new Vector3UI(fi, obj));
             }
         }
     }
 }