Ejemplo n.º 1
0
        private object drawList(string name, object val, object info)
        {
            Type type;

            if (typeof(PropertyInfo).IsAssignableFrom(info.GetType()))
            {
                PropertyInfo pinfo = (PropertyInfo)info;
                type = pinfo.PropertyType;
            }
            else
            {
                FieldInfo finfo = (FieldInfo)info;
                type = finfo.FieldType;
            }
            if (val == null)
            {
                val = type.GetConstructor(new Type[] { }).Invoke(new object[] { });
            }
            int hashcode = val.GetHashCode();

            try
            {
                activeFlags[hashcode] = EditorGUILayout.Foldout(activeFlags[hashcode], name);
            }
            catch (KeyNotFoundException e)
            {
                activeFlags.Add(hashcode, false);
                activeFlags[hashcode] = EditorGUILayout.Foldout(activeFlags[hashcode], name);
            }


            if (activeFlags[hashcode])
            {
                EditorGUI.indentLevel++;
                Type eleType;

                MethodInfo   getInfo;
                MethodInfo   addInfo;
                PropertyInfo capacityInfo;
                PropertyInfo CountInfo;

                eleType      = type.GetGenericArguments()[0];
                addInfo      = type.GetMethod("Add");
                getInfo      = type.GetMethod("get_Item");
                capacityInfo = type.GetProperty("Capacity");
                CountInfo    = type.GetProperty("Count");

                int count    = (int)CountInfo.GetGetMethod().Invoke(val, null);
                int capacity = EditorGUILayout.DelayedIntField("size", (int)capacityInfo.GetGetMethod().Invoke(val, null));

                //if (count > capacity)
                //{
                //    val=type.GetMethod("CopyTo",new Type[] { Int32,})
                //}
                capacityInfo.GetSetMethod().Invoke(val, new object[] { capacity });

                for (int i = 0; i < capacity; i++)
                {
                    object element;
                    if (count < capacity)
                    {
                        element = Activator.CreateInstance(eleType, new object[] { });
                        addInfo.Invoke(val, new object[] { element });
                        count++;
                    }
                    else
                    {
                        element = getInfo.Invoke(val, new object[] { i });
                    }
                    //var finfos = element.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance);

                    //foreach (var finfo in finfos)
                    //    drawIns(finfo.FieldType, finfo, element);
                    try {
                        element = dict[eleType].Invoke(eleType.Name + " " + i + " :", element, null);
                        Debug.Log(getInfo.Invoke(val, new object[] { i }));
                    }
                    catch (KeyNotFoundException e)
                    {
                        EditorGUILayout.HelpBox(eleType + "在表中没有匹配", MessageType.Error);
                    }
                }
                EditorGUI.indentLevel--;
            }
            return(val);
        }