private void AddOne(ref IDictionary v)
 {
     try
     {
         Type type = v.GetType();
         if (type.IsGenericType)
         {
             Type[] types = type.GetGenericArguments();
             if (types.Length != 2)
             {
                 Debug.Log($"{type}参数不是2个:{string.Join<Type>(";", types)}");
             }
             else
             {
                 v.Add(ObjectDrawerHelper.CreateInstance(types[0]), ObjectDrawerHelper.CreateInstance(types[1]));
             }
         }
         else
         {
             Debug.Log($"{type}没有明确的类型表示");
         }
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
 }
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
            }
            else
            {
                bool fold = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    EditorGUILayout.BeginHorizontal();
                    ObjectDrawerHelper.Tab();
                    ObjectDrawerHelper.DrawObj(value, draw.NeedDelayed);
                    EditorGUILayout.EndHorizontal();
                }
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
Ejemplo n.º 3
0
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
            }
            else
            {
                var  v           = (IList)value;
                Type elementType = GetElementType(v);
                bool fold        = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    int count   = v.Count;
                    int len     = count / 10 + 1;
                    int count_T = v.Count;

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

                    for (int i = 0; i < v.Count; i++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        ObjectDrawerHelper.Tab();
                        EditorGUILayout.LabelField("Element:", GUILayout.Width(60));

                        EditorGUILayout.BeginVertical();
                        string showName = $"{i}";
                        v[i] = ObjectDrawerHelper.DrawAndGetNewValue(elementType, v[i], new DrawInfo()
                        {
                            Changeable    = draw.Changeable,
                            NeedDelayed   = draw.NeedDelayed,
                            ShowName      = showName,
                            ShowNameWidth = len * 5 + 15,
                            IsStatic      = false,
                            FieldName     = field.Name + $"_{i}"
                        }, field);
                        EditorGUILayout.EndVertical();

                        EditorGUILayout.EndHorizontal();
                    }
                }

                value = v;
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
Ejemplo n.º 4
0
 private void AddOne(Type type, ref IList v)
 {
     try
     {
         if (type != null)
         {
             v.Add(ObjectDrawerHelper.CreateInstance(type));
         }
     }
     catch (Exception e)
     {
         Debug.LogException(e);
     }
 }
Ejemplo n.º 5
0
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (draw.ShowNameWidth < 0)
            {
                if (value == null)
                {
                    ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
                }
                else
                {
                    value = EditorGUILayout.GradientField(draw.ShowName, (Gradient)value);
                }
            }
            else if (draw.ShowNameWidth == 0)
            {
                if (value == null)
                {
                    ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
                }
                else
                {
                    value = EditorGUILayout.GradientField((Gradient)value);
                }
            }
            else
            {
                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.LabelField(draw.ShowName, GUILayout.Width(draw.ShowNameWidth));
                if (value == null)
                {
                    ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
                }
                else
                {
                    value = EditorGUILayout.GradientField((Gradient)value);
                }

                EditorGUILayout.EndHorizontal();
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, null, ref value);
            }
            else
            {
                var  v    = (Delegate)value;
                bool fold = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    Delegate[] ds  = v.GetInvocationList();
                    int        len = ds.Length / 10 + 1;
                    for (int i = 0; i < ds.Length; i++)
                    {
                        var d = ds[i];
                        EditorGUILayout.BeginHorizontal();
                        ObjectDrawerHelper.Tab();
                        EditorGUILayout.LabelField("Delegate:", GUILayout.Width(60));
                        EditorGUILayout.LabelField($"{i}", GUILayout.Width(len * 5 + 15));
                        EditorGUILayout.LabelField($"{d.Method.ReflectedType}.{d.Method.Name}");
                        EditorGUILayout.EndHorizontal();
                    }

                    if (GUILayout.Button("测试运行(如果该委托无参的话)"))
                    {
                        v.DynamicInvoke();
                    }
                }

                value = v;
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
Ejemplo n.º 7
0
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
            }
            else
            {
                var  v    = (Stack)value;
                bool fold = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    int count = v.Count;
                    int len   = count / 10 + 1;
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("数量:", GUILayout.Width(60));
                    EditorGUILayout.LabelField(count.ToString());
                    EditorGUILayout.EndHorizontal();

                    var array = v.ToArray();
                    for (int i = 0; i < array.Length; i++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        ObjectDrawerHelper.Tab();
                        EditorGUILayout.LabelField("Element:", GUILayout.Width(60));

                        EditorGUILayout.BeginVertical();
                        string showName = $"{i}";
                        array[i] = ObjectDrawerHelper.DrawAndGetNewValue(array[i].GetType(), array[i], new DrawInfo()
                        {
                            Changeable    = draw.Changeable,
                            NeedDelayed   = draw.NeedDelayed,
                            ShowName      = showName,
                            ShowNameWidth = len * 5 + 15,
                            IsStatic      = false,
                            FieldName     = field.Name + $"_{i}"
                        }, field);
                        EditorGUILayout.EndVertical();

                        EditorGUILayout.EndHorizontal();
                    }

                    v.Clear();
                    for (int i = array.Length - 1; i >= 0; i--)
                    {
                        v.Push(array[i]);
                    }

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("");
                    if (v.Count > 0)
                    {
                        if (GUILayout.Button("Pop", GUILayout.Width(40)))
                        {
                            v.Pop();
                        }
                    }
                    if (GUILayout.Button("Push", GUILayout.Width(40)))
                    {
                        v.Push(ObjectDrawerHelper.CreateInstance(selectIndex));
                    }
                    selectIndex = EditorGUILayout.Popup(selectIndex, ObjectDrawerHelper.SelectTypeNames, GUILayout.Width(80));
                    EditorGUILayout.EndHorizontal();
                }

                value = v;
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
            }
            else
            {
                var  v    = (ICollection)value;
                bool fold = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    int count = v.Count;
                    int len   = count / 10 + 1;
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("数量:", GUILayout.Width(60));
                    EditorGUILayout.LabelField(count.ToString());
                    EditorGUILayout.EndHorizontal();

                    object[] array = new object[v.Count];
                    v.CopyTo(array, 0);
                    for (int i = 0; i < array.Length; i++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        ObjectDrawerHelper.Tab();
                        EditorGUILayout.LabelField("Element:", GUILayout.Width(60));

                        EditorGUILayout.BeginVertical();
                        string showName = $"{i}";
                        array[i] = ObjectDrawerHelper.DrawAndGetNewValue(array[i].GetType(), array[i], new DrawInfo()
                        {
                            Changeable    = draw.Changeable,
                            NeedDelayed   = draw.NeedDelayed,
                            ShowName      = showName,
                            ShowNameWidth = len * 5 + 15,
                            IsStatic      = false,
                            FieldName     = field.Name + $"_{i}"
                        }, field);
                        EditorGUILayout.EndVertical();

                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("");
                    if (v.Count > 0)
                    {
                        if (GUILayout.Button("Pop", GUILayout.Width(40)))
                        {
                            type.GetMethod("Pop").Invoke(value, null);
                        }
                    }
                    if (GUILayout.Button("Push", GUILayout.Width(40)))
                    {
                        type.GetMethod("Push").Invoke(value, new object[1] {
                            ObjectDrawerHelper.CreateInstance(type.GetGenericArguments()[0])
                        });
                    }
                    EditorGUILayout.EndHorizontal();
                }

                value = v;
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }
        public object DrawAndGetNewValue(Type type, object value, DrawInfo draw, FieldInfo field)
        {
            EditorGUI.BeginDisabledGroup(!draw.Changeable);

            if (value == null)
            {
                ObjectDrawerHelper.ShowNull(draw.ShowName, type, ref value);
            }
            else
            {
                var  v    = (IDictionary)value;
                bool fold = ObjectDrawerHelper.GetAndAddFieldShow_Fold(draw.FieldName);
                fold = EditorGUILayout.Foldout(fold, draw.ShowName, true);
                ObjectDrawerHelper.SetAndAddFieldShow_Fold(draw.FieldName, fold);
                if (fold)
                {
                    int count = v.Count;
                    int len   = count / 10 + 1;
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.LabelField("数量:", GUILayout.Width(60));
                    EditorGUILayout.LabelField(count.ToString());
                    EditorGUILayout.EndHorizontal();

                    List <object> keys   = new List <object>();
                    List <object> values = new List <object>();

                    keys.Clear();
                    foreach (var item in v.Keys)
                    {
                        keys.Add(item);
                    }

                    values.Clear();
                    foreach (var item in v.Values)
                    {
                        values.Add(item);
                    }

                    for (int i = 0; i < keys.Count; i++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        ObjectDrawerHelper.Tab();
                        EditorGUILayout.LabelField("Element:", GUILayout.Width(60));
                        string showName = $"{i}";
                        EditorGUILayout.LabelField(showName, GUILayout.Width(len * 5 + 15));

                        EditorGUILayout.BeginVertical();
                        keys[i] = ObjectDrawerHelper.DrawAndGetNewValue(keys[i].GetType(), keys[i], new DrawInfo()
                        {
                            Changeable    = draw.Changeable,
                            NeedDelayed   = draw.NeedDelayed,
                            ShowName      = "Key:",
                            ShowNameWidth = 30,
                            IsStatic      = false,
                            FieldName     = field.Name + $"_{i}_Key"
                        }, field);
                        EditorGUILayout.EndVertical();

                        EditorGUILayout.BeginVertical();
                        values[i] = ObjectDrawerHelper.DrawAndGetNewValue(values[i].GetType(), values[i], new DrawInfo()
                        {
                            Changeable    = draw.Changeable,
                            NeedDelayed   = draw.NeedDelayed,
                            ShowName      = "Value:",
                            ShowNameWidth = 40,
                            IsStatic      = false,
                            FieldName     = field.Name + $"_{i}_Value"
                        }, field);
                        EditorGUILayout.EndVertical();

                        if (!v.IsFixedSize)
                        {
                            if (GUILayout.Button("x", GUILayout.Width(20)))
                            {
                                keys.RemoveAt(i);
                                values.RemoveAt(i);
                                EditorGUILayout.EndHorizontal();
                                break;
                            }
                        }

                        EditorGUILayout.EndHorizontal();
                    }

                    v.Clear();
                    for (int i = 0; i < keys.Count; i++)
                    {
                        v.Add(keys[i], values[i]);
                    }

                    if (!v.IsFixedSize)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.LabelField("");
                        if (GUILayout.Button("+", GUILayout.Width(20)))
                        {
                            AddOne(ref v);
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }

                value = v;
            }

            EditorGUI.EndDisabledGroup();
            return(value);
        }