public void Draw(object value, FieldInfo field = null)
        {
            this.type = value.GetType();
            this.name = field == null ? this.type.Name : field.Name;
            this.v    = (ICollection)value;
            this.fold = ObjectDrawerHelper.GetAndAddFold(value);
            this.fold = EditorGUILayout.Foldout(this.fold, this.name, true);
            ObjectDrawerHelper.SetAndAddFold(value, this.fold);
            if (!this.fold)
            {
                return;
            }

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("数量:", GUILayout.Width(60));
            EditorGUILayout.LabelField(this.v.Count.ToString());
            EditorGUILayout.EndHorizontal();

            this.list.Clear();
            foreach (var item in this.v)
            {
                this.list.Add(item);
            }

            for (var i = 0; i < this.list.Count; i++)
            {
                EditorGUILayout.BeginHorizontal();
                ObjectDrawerHelper.Tab();
                EditorGUILayout.LabelField("Element:", GUILayout.Width(60));
                ObjectDrawerHelper.Draw(this.list[i]);
                EditorGUILayout.EndHorizontal();
            }
        }
        public void Draw(object value, FieldInfo field = null)
        {
            this.type = value.GetType();
            this.name = field == null ? this.type.Name : field.Name;
            this.v    = (Delegate)value;
            this.fold = ObjectDrawerHelper.GetAndAddFold(value);
            this.fold = EditorGUILayout.Foldout(this.fold, this.name, true);
            ObjectDrawerHelper.SetAndAddFold(value, this.fold);
            if (!this.fold)
            {
                return;
            }

            var ds = this.v.GetInvocationList();

            this.len = ds.Length / 10 + 1;
            for (var i = 0; i < ds.Length; i++)
            {
                this.d = ds[i];
                EditorGUILayout.BeginHorizontal();
                ObjectDrawerHelper.Tab();
                EditorGUILayout.LabelField("Delegate:", GUILayout.Width(60));
                EditorGUILayout.LabelField($"{i}", GUILayout.Width(this.len * 5 + 15));
                EditorGUILayout.LabelField($"{this.d.Method.ReflectedType}.{this.d.Method.Name}");
                EditorGUILayout.EndHorizontal();
            }
        }
Exemplo n.º 3
0
        public void Draw(object value, FieldInfo field = null)
        {
            this.type = value.GetType();
            this.name = field == null ? this.type.Name : field.Name;
            this.fold = ObjectDrawerHelper.GetAndAddFold(value);
            this.fold = EditorGUILayout.Foldout(this.fold, this.name, true);
            ObjectDrawerHelper.SetAndAddFold(value, this.fold);
            if (!this.fold)
            {
                return;
            }

            EditorGUILayout.BeginHorizontal();
            ObjectDrawerHelper.Tab();

            this.fieldInfos = this.type.GetFields(bindingFlags);
            this.fs.Clear();
            for (var i = 0; i < this.fieldInfos.Length; i++)
            {
                this.f = this.fieldInfos[i];
                //剔除值为自己的字段
                if ((this.f.FieldType == this.type || this.type.IsSubclassOf(this.f.FieldType) || this.f.FieldType.IsSubclassOf(this.type)) && this.f.GetValue(value) == value)
                {
                    continue;
                }

                this.fs.Add(this.f);
            }

            EditorGUILayout.BeginVertical();
            if (this.fs.Count > 0)
            {
                for (var i = 0; i < this.fs.Count; i++)
                {
                    this.f = this.fs[i];
                    ObjectDrawerHelper.Draw(this.f.GetValue(value), this.f);
                }
            }

            EditorGUILayout.EndVertical();

            EditorGUILayout.EndHorizontal();
        }