Esempio n. 1
0
        void ShowAddMemberMenu(Rect rect, SerializedProperty componentProperty, SerializedProperty memberNameProperty)
        {
            GameObject gameObject = null;

            if (componentProperty.objectReferenceValue is GameObject)
            {
                gameObject = componentProperty.objectReferenceValue as GameObject;
            }
            else if (componentProperty.objectReferenceValue is Component)
            {
                gameObject = (componentProperty.objectReferenceValue as Component).gameObject;
            }
            GenericMenu menu = new GenericMenu();

            foreach (Component component in gameObject.GetComponents(typeof(Component)))
            {
                List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(component.GetType());
                foreach (MemberInfo memberInfo in memberInfoList)
                {
                    GUIContent content = new GUIContent(component.GetType().Name + "/" + ReflectionMemberUtility.FormatMemberName(memberInfo));
                    menu.AddItem(content, false, () => {
                        memberNameProperty.stringValue         = memberInfo.Name;
                        componentProperty.objectReferenceValue = component;
                        memberNameProperty.serializedObject.ApplyModifiedProperties();
                    });
                }
            }
            menu.DropDown(rect);
        }
Esempio n. 2
0
        void AddMemberMenu(GenericMenu menu, MemberInfo memberInfo, System.Type paramType)
        {
            GUIContent content = new GUIContent(ReflectionMemberUtility.FormatMemberName(memberInfo));

            if (paramType == null)
            {
                if (memberInfo.MemberType == MemberTypes.Method)
                {
                    MethodInfo methodInfo = memberInfo as MethodInfo;
                    if (methodInfo.GetParameters().Length == 0)
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, memberInfo);
                        return;
                    }
                }
            }
            else
            {
                switch (memberInfo.MemberType)
                {
                case MemberTypes.Field:
                    FieldInfo fieldInfo = memberInfo as FieldInfo;
                    if (paramType.IsAssignableFrom(fieldInfo.FieldType))
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, memberInfo);
                        return;
                    }
                    break;

                case MemberTypes.Property:
                    PropertyInfo propertyInfo = memberInfo as PropertyInfo;
                    if (paramType.IsAssignableFrom(propertyInfo.PropertyType))
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, memberInfo);
                        return;
                    }
                    break;

                case MemberTypes.Method:
                    MethodInfo      methodInfo = memberInfo as MethodInfo;
                    ParameterInfo[] parameters = methodInfo.GetParameters();
                    if (parameters.Length == 0 || paramType.IsAssignableFrom(parameters[0].GetType()))
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, memberInfo);
                        return;
                    }
                    break;
                }
            }
            menu.AddDisabledItem(content);
        }
Esempio n. 3
0
        protected virtual void AddMembers(GenericMenu menu, string modelId, System.Type paramType)
        {
            List <System.Type> modelTypeList = ReflectionUtility.GetModelTypeList();

            System.Type type = modelTypeList.Find((t) => t.FullName == modelId);
            if (type == null)
            {
                return;
            }

            List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(type);

            foreach (MemberInfo memberInfo in memberInfoList)
            {
                AddMemberMenu(menu, memberInfo, paramType);
            }
        }
Esempio n. 4
0
        void ShowAddMemberMenu(Rect rect, GameObject gameObject, SerializedObject serializedObject, string propertyPath)
        {
            GenericMenu menu = new GenericMenu();

            foreach (Component component in gameObject.GetComponents(typeof(Component)))
            {
                List <MemberInfo> memberInfoList = ReflectionMemberUtility.GetMembers(component.GetType());
                foreach (MemberInfo memberInfo in memberInfoList)
                {
                    GUIContent content = new GUIContent(component.GetType().Name + "/" + ReflectionMemberUtility.FormatMemberName(memberInfo));
                    menu.AddItem(content, false, () => {
                        SerializedProperty property          = serializedObject.FindProperty(propertyPath);
                        SerializedProperty componentProperty = serializedObject.FindProperty(componentPath);
                        property.stringValue = memberInfo.Name;
                        componentProperty.objectReferenceValue = component;
                        serializedObject.ApplyModifiedProperties();
                    });
                }
            }
            menu.DropDown(rect);
        }
        protected void AddMemberMenu(SerializedProperty property, GenericMenu menu, MemberInfo memberInfo, string modelId, System.Type paramType)
        {
            GUIContent content = new GUIContent(ReflectionMemberUtility.FormatMemberName(memberInfo));

            if (paramType == null)
            {
                if (memberInfo.MemberType == MemberTypes.Method)
                {
                    MethodInfo methodInfo = memberInfo as MethodInfo;
                    if (methodInfo.GetParameters().Length == 0)
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo));
                        return;
                    }
                    else if (methodInfo.GetParameters().Length == 1)
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, methodInfo.GetParameters()[0].ParameterType));
                        return;
                    }
                }
            }
            else
            {
                switch (memberInfo.MemberType)
                {
                case MemberTypes.Field:
                    FieldInfo fieldInfo = memberInfo as FieldInfo;
                    if (paramType.IsAssignableFrom(fieldInfo.FieldType))
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo));
                        return;
                    }
                    break;

                case MemberTypes.Property:
                    PropertyInfo propertyInfo = memberInfo as PropertyInfo;
                    if (paramType.IsAssignableFrom(propertyInfo.PropertyType))
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo));
                        return;
                    }
                    break;

                case MemberTypes.Method:
                    MethodInfo      methodInfo = memberInfo as MethodInfo;
                    ParameterInfo[] parameters = methodInfo.GetParameters();
                    if (parameters.Length == 0)
                    {
                        menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo));
                        return;
                    }
                    else if (parameters.Length == 1)
                    {
                        if (paramType.IsAssignableFrom(parameters[0].ParameterType))
                        {
                            menu.AddItem(new GUIContent(content.text + " - TP"), false, OnAddMemberBinding, new MenuContext(property, memberInfo));
                            menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, parameters[0].ParameterType));
                            return;
                        }
                        else
                        {
                            menu.AddItem(content, false, OnAddMemberBinding, new MenuContext(property, memberInfo, parameters[0].ParameterType));
                            return;
                        }
                    }
                    break;
                }
            }
            menu.AddDisabledItem(content);
        }