private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, UnityEventDrawer.ValidMethodMap method, string targetName)
        {
            PersistentListenerMode mode = method.mode;

            UnityEngine.Object     objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
            string                 stringValue          = listener.FindPropertyRelative("m_MethodName").stringValue;
            PersistentListenerMode mode2 = UnityEventDrawer.GetMode(listener.FindPropertyRelative("m_Mode"));
            SerializedProperty     serializedProperty = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
            StringBuilder          stringBuilder      = new StringBuilder();
            int num = method.methodInfo.GetParameters().Length;

            for (int i = 0; i < num; i++)
            {
                ParameterInfo parameterInfo = method.methodInfo.GetParameters()[i];
                stringBuilder.Append(string.Format("{0}", UnityEventDrawer.GetTypeName(parameterInfo.ParameterType)));
                if (i < num - 1)
                {
                    stringBuilder.Append(", ");
                }
            }
            bool flag = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode == mode2;

            if (flag && mode == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
            {
                flag &= (method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == serializedProperty.stringValue);
            }
            string formattedMethodName = UnityEventDrawer.GetFormattedMethodName(targetName, method.methodInfo.Name, stringBuilder.ToString(), mode == PersistentListenerMode.EventDefined);

            menu.AddItem(new GUIContent(formattedMethodName), flag, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), new UnityEventDrawer.UnityEventFunction(listener, method.target, method.methodInfo, mode));
        }
Example #2
0
 private static void AddMethodsToMenu(GenericMenu menu, SerializedProperty listener, List <UnityEventDrawer.ValidMethodMap> methods, string targetName)
 {
     foreach (UnityEventDrawer.ValidMethodMap method in (IEnumerable <UnityEventDrawer.ValidMethodMap>)methods.OrderBy <UnityEventDrawer.ValidMethodMap, int>((Func <UnityEventDrawer.ValidMethodMap, int>)(e => e.methodInfo.Name.StartsWith("set_") ? 0 : 1)).ThenBy <UnityEventDrawer.ValidMethodMap, string>((Func <UnityEventDrawer.ValidMethodMap, string>)(e => e.methodInfo.Name)))
     {
         UnityEventDrawer.AddFunctionsForScript(menu, listener, method, targetName);
     }
 }
Example #3
0
        private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, UnityEventDrawer.ValidMethodMap method, string targetName)
        {
            PersistentListenerMode mode1 = method.mode;

            UnityEngine.Object     objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
            string                 stringValue          = listener.FindPropertyRelative("m_MethodName").stringValue;
            PersistentListenerMode mode2            = UnityEventDrawer.GetMode(listener.FindPropertyRelative("m_Mode"));
            SerializedProperty     propertyRelative = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
            StringBuilder          stringBuilder    = new StringBuilder();
            int length = method.methodInfo.GetParameters().Length;

            for (int index = 0; index < length; ++index)
            {
                System.Reflection.ParameterInfo parameter = method.methodInfo.GetParameters()[index];
                stringBuilder.Append(string.Format("{0}", (object)UnityEventDrawer.GetTypeName(parameter.ParameterType)));
                if (index < length - 1)
                {
                    stringBuilder.Append(", ");
                }
            }
            bool on = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode1 == mode2;

            if (on && mode1 == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
            {
                on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == propertyRelative.stringValue;
            }
            string formattedMethodName = UnityEventDrawer.GetFormattedMethodName(targetName, method.methodInfo.Name, stringBuilder.ToString(), mode1 == PersistentListenerMode.EventDefined);

            menu.AddItem(new GUIContent(formattedMethodName), on, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), (object)new UnityEventDrawer.UnityEventFunction(listener, method.target, method.methodInfo, mode1));
        }
Example #4
0
        private static GenericMenu BuildPopupList(UnityEngine.Object target, UnityEventBase dummyEvent, SerializedProperty listener)
        {
            UnityEngine.Object target1 = target;
            if (target1 is Component)
            {
                target1 = (UnityEngine.Object)(target as Component).gameObject;
            }
            SerializedProperty propertyRelative = listener.FindPropertyRelative("m_MethodName");
            GenericMenu        menu             = new GenericMenu();

            menu.AddItem(new GUIContent("No Function"), string.IsNullOrEmpty(propertyRelative.stringValue), new GenericMenu.MenuFunction2(UnityEventDrawer.ClearEventFunction), (object)new UnityEventDrawer.UnityEventFunction(listener, (UnityEngine.Object)null, (MethodInfo)null, PersistentListenerMode.EventDefined));
            if (target1 == (UnityEngine.Object)null)
            {
                return(menu);
            }
            menu.AddSeparator(string.Empty);
            System.Type[] array = ((IEnumerable <System.Reflection.ParameterInfo>)dummyEvent.GetType().GetMethod("Invoke").GetParameters()).Select <System.Reflection.ParameterInfo, System.Type>((Func <System.Reflection.ParameterInfo, System.Type>)(x => x.ParameterType)).ToArray <System.Type>();
            UnityEventDrawer.GeneratePopUpForType(menu, target1, false, listener, array);
            if (target1 is GameObject)
            {
                Component[]   components = (target1 as GameObject).GetComponents <Component>();
                List <string> list       = ((IEnumerable <Component>)components).Where <Component>((Func <Component, bool>)(c => (UnityEngine.Object)c != (UnityEngine.Object)null)).Select <Component, string>((Func <Component, string>)(c => c.GetType().Name)).GroupBy <string, string>((Func <string, string>)(x => x)).Where <IGrouping <string, string> >((Func <IGrouping <string, string>, bool>)(g => g.Count <string>() > 1)).Select <IGrouping <string, string>, string>((Func <IGrouping <string, string>, string>)(g => g.Key)).ToList <string>();
                foreach (Component component in components)
                {
                    if (!((UnityEngine.Object)component == (UnityEngine.Object)null))
                    {
                        UnityEventDrawer.GeneratePopUpForType(menu, (UnityEngine.Object)component, list.Contains(component.GetType().Name), listener, array);
                    }
                }
            }
            return(menu);
        }
Example #5
0
        public void OnGUI(Rect position)
        {
            if (this.m_ListenersArray == null || !this.m_ListenersArray.isArray)
            {
                return;
            }
            this.m_DummyEvent = UnityEventDrawer.GetDummyEvent(this.m_Prop);
            if (this.m_DummyEvent == null)
            {
                return;
            }
            if (this.m_Styles == null)
            {
                this.m_Styles = new UnityEventDrawer.Styles();
            }
            if (this.m_ReorderableList == null)
            {
                return;
            }
            int indentLevel = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 0;
            this.m_ReorderableList.DoList(position);
            EditorGUI.indentLevel = indentLevel;
        }
Example #6
0
 private static void GetMethodsForTargetAndMode(UnityEngine.Object target, System.Type[] delegateArgumentsTypes, List <UnityEventDrawer.ValidMethodMap> methods, PersistentListenerMode mode)
 {
     foreach (UnityEventDrawer.ValidMethodMap method in UnityEventDrawer.CalculateMethodMap(target, delegateArgumentsTypes, mode == PersistentListenerMode.Object))
     {
         method.mode = mode;
         methods.Add(method);
     }
 }
Example #7
0
        private static GenericMenu BuildPopupList(UnityEngine.Object target, UnityEventBase dummyEvent, SerializedProperty listener)
        {
            UnityEngine.Object @object = target;
            if (@object is Component)
            {
                @object = (target as Component).gameObject;
            }
            SerializedProperty serializedProperty = listener.FindPropertyRelative("m_MethodName");
            GenericMenu        genericMenu        = new GenericMenu();
            GenericMenu        arg_6D_0           = genericMenu;
            GUIContent         arg_6D_1           = new GUIContent("No Function");
            bool arg_6D_2 = string.IsNullOrEmpty(serializedProperty.stringValue);

            if (UnityEventDrawer.< > f__mg$cache0 == null)
            {
                UnityEventDrawer.< > f__mg$cache0 = new GenericMenu.MenuFunction2(UnityEventDrawer.ClearEventFunction);
            }
            arg_6D_0.AddItem(arg_6D_1, arg_6D_2, UnityEventDrawer.< > f__mg$cache0, new UnityEventDrawer.UnityEventFunction(listener, null, null, PersistentListenerMode.EventDefined));
            GenericMenu result;

            if (@object == null)
            {
                result = genericMenu;
            }
            else
            {
                genericMenu.AddSeparator("");
                Type       type   = dummyEvent.GetType();
                MethodInfo method = type.GetMethod("Invoke");
                Type[]     delegateArgumentsTypes = (from x in method.GetParameters()
                                                     select x.ParameterType).ToArray <Type>();
                UnityEventDrawer.GeneratePopUpForType(genericMenu, @object, false, listener, delegateArgumentsTypes);
                if (@object is GameObject)
                {
                    Component[]   components = (@object as GameObject).GetComponents <Component>();
                    List <string> list       = (from c in components
                                                where c != null
                                                select c.GetType().Name into x
                                                group x by x into g
                                                where g.Count <string>() > 1
                                                select g.Key).ToList <string>();
                    Component[] array = components;
                    for (int i = 0; i < array.Length; i++)
                    {
                        Component component = array[i];
                        if (!(component == null))
                        {
                            UnityEventDrawer.GeneratePopUpForType(genericMenu, component, list.Contains(component.GetType().Name), listener, delegateArgumentsTypes);
                        }
                    }
                }
                result = genericMenu;
            }
            return(result);
        }
Example #8
0
        private static void AddMethodsToMenu(GenericMenu menu, SerializedProperty listener, List <UnityEventDrawer.ValidMethodMap> methods, string targetName)
        {
            IEnumerable <UnityEventDrawer.ValidMethodMap> enumerable = from e in methods
                                                                       orderby(!e.methodInfo.Name.StartsWith("set_")) ? 1 : 0, e.methodInfo.Name
            select e;

            foreach (UnityEventDrawer.ValidMethodMap current in enumerable)
            {
                UnityEventDrawer.AddFunctionsForScript(menu, listener, current, targetName);
            }
        }
Example #9
0
        private static void GetMethodsForTargetAndMode(UnityEngine.Object target, Type[] delegateArgumentsTypes, List <UnityEventDrawer.ValidMethodMap> methods, PersistentListenerMode mode)
        {
            IEnumerable <UnityEventDrawer.ValidMethodMap> enumerable = UnityEventDrawer.CalculateMethodMap(target, delegateArgumentsTypes, mode == PersistentListenerMode.Object);

            foreach (UnityEventDrawer.ValidMethodMap current in enumerable)
            {
                UnityEventDrawer.ValidMethodMap item = current;
                item.mode = mode;
                methods.Add(item);
            }
        }
        private static void GeneratePopUpForType(GenericMenu menu, UnityEngine.Object target, bool useFullTargetName, SerializedProperty listener, Type[] delegateArgumentsTypes)
        {
            List <UnityEventDrawer.ValidMethodMap> list = new List <UnityEventDrawer.ValidMethodMap>();
            string text = (!useFullTargetName) ? target.GetType().Name : target.GetType().FullName;
            bool   flag = false;

            if (delegateArgumentsTypes.Length != 0)
            {
                UnityEventDrawer.GetMethodsForTargetAndMode(target, delegateArgumentsTypes, list, PersistentListenerMode.EventDefined);
                if (list.Count > 0)
                {
                    menu.AddDisabledItem(new GUIContent(text + "/Dynamic " + string.Join(", ", (
                                                                                             from e in delegateArgumentsTypes
                                                                                             select UnityEventDrawer.GetTypeName(e)).ToArray <string>())));
                    UnityEventDrawer.AddMethodsToMenu(menu, listener, list, text);
                    flag = true;
                }
            }
            list.Clear();
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[]
            {
                typeof(float)
            }, list, PersistentListenerMode.Float);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[]
            {
                typeof(int)
            }, list, PersistentListenerMode.Int);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[]
            {
                typeof(string)
            }, list, PersistentListenerMode.String);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[]
            {
                typeof(bool)
            }, list, PersistentListenerMode.Bool);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[]
            {
                typeof(UnityEngine.Object)
            }, list, PersistentListenerMode.Object);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new Type[0], list, PersistentListenerMode.Void);
            if (list.Count > 0)
            {
                if (flag)
                {
                    menu.AddItem(new GUIContent(text + "/ "), false, null);
                }
                if (delegateArgumentsTypes.Length != 0)
                {
                    menu.AddDisabledItem(new GUIContent(text + "/Static Parameters"));
                }
                UnityEventDrawer.AddMethodsToMenu(menu, listener, list, text);
            }
        }
Example #11
0
        private static void GeneratePopUpForType(GenericMenu menu, UnityEngine.Object target, bool useFullTargetName, SerializedProperty listener, System.Type[] delegateArgumentsTypes)
        {
            List <UnityEventDrawer.ValidMethodMap> methods = new List <UnityEventDrawer.ValidMethodMap>();
            string targetName = !useFullTargetName?target.GetType().Name : target.GetType().FullName;

            bool flag = false;

            if (delegateArgumentsTypes.Length != 0)
            {
                UnityEventDrawer.GetMethodsForTargetAndMode(target, delegateArgumentsTypes, methods, PersistentListenerMode.EventDefined);
                if (methods.Count > 0)
                {
                    menu.AddDisabledItem(new GUIContent(targetName + "/Dynamic " + string.Join(", ", ((IEnumerable <System.Type>)delegateArgumentsTypes).Select <System.Type, string>((Func <System.Type, string>)(e => UnityEventDrawer.GetTypeName(e))).ToArray <string>())));
                    UnityEventDrawer.AddMethodsToMenu(menu, listener, methods, targetName);
                    flag = true;
                }
            }
            methods.Clear();
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[1] {
                typeof(float)
            }, methods, PersistentListenerMode.Float);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[1] {
                typeof(int)
            }, methods, PersistentListenerMode.Int);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[1] {
                typeof(string)
            }, methods, PersistentListenerMode.String);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[1] {
                typeof(bool)
            }, methods, PersistentListenerMode.Bool);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[1] {
                typeof(UnityEngine.Object)
            }, methods, PersistentListenerMode.Object);
            UnityEventDrawer.GetMethodsForTargetAndMode(target, new System.Type[0], methods, PersistentListenerMode.Void);
            if (methods.Count <= 0)
            {
                return;
            }
            if (flag)
            {
                menu.AddItem(new GUIContent(targetName + "/ "), false, (GenericMenu.MenuFunction)null);
            }
            if (delegateArgumentsTypes.Length != 0)
            {
                menu.AddDisabledItem(new GUIContent(targetName + "/Static Parameters"));
            }
            UnityEventDrawer.AddMethodsToMenu(menu, listener, methods, targetName);
        }
Example #12
0
 public void OnGUI(Rect position)
 {
     if (this.m_ListenersArray != null && this.m_ListenersArray.isArray)
     {
         this.m_DummyEvent = UnityEventDrawer.GetDummyEvent(this.m_Prop);
         if (this.m_DummyEvent != null)
         {
             if (this.m_ReorderableList != null)
             {
                 int indentLevel = EditorGUI.indentLevel;
                 EditorGUI.indentLevel = 0;
                 this.m_ReorderableList.DoList(position);
                 EditorGUI.indentLevel = indentLevel;
             }
         }
     }
 }
Example #13
0
        private void DrawEventListener(Rect rect, int index, bool isactive, bool isfocused)
        {
            SerializedProperty arrayElementAtIndex = this.m_ListenersArray.GetArrayElementAtIndex(index);

            rect.y += 1f;
            Rect[]             rowRects            = this.GetRowRects(rect);
            Rect               position            = rowRects[0];
            Rect               position2           = rowRects[1];
            Rect               rect2               = rowRects[2];
            Rect               position3           = rowRects[3];
            SerializedProperty property            = arrayElementAtIndex.FindPropertyRelative("m_CallState");
            SerializedProperty mode                = arrayElementAtIndex.FindPropertyRelative("m_Mode");
            SerializedProperty serializedProperty  = arrayElementAtIndex.FindPropertyRelative("m_Arguments");
            SerializedProperty serializedProperty2 = arrayElementAtIndex.FindPropertyRelative("m_Target");
            SerializedProperty serializedProperty3 = arrayElementAtIndex.FindPropertyRelative("m_MethodName");
            Color              backgroundColor     = GUI.backgroundColor;

            GUI.backgroundColor = Color.white;
            EditorGUI.PropertyField(position, property, GUIContent.none);
            EditorGUI.BeginChangeCheck();
            GUI.Box(position2, GUIContent.none);
            EditorGUI.PropertyField(position2, serializedProperty2, GUIContent.none);
            if (EditorGUI.EndChangeCheck())
            {
                serializedProperty3.stringValue = null;
            }
            PersistentListenerMode persistentListenerMode = UnityEventDrawer.GetMode(mode);

            if (serializedProperty2.objectReferenceValue == null || string.IsNullOrEmpty(serializedProperty3.stringValue))
            {
                persistentListenerMode = PersistentListenerMode.Void;
            }
            SerializedProperty serializedProperty4;

            switch (persistentListenerMode)
            {
            case PersistentListenerMode.Object:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_ObjectArgument");
                break;

            case PersistentListenerMode.Int:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_IntArgument");
                break;

            case PersistentListenerMode.Float:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_FloatArgument");
                break;

            case PersistentListenerMode.String:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_StringArgument");
                break;

            case PersistentListenerMode.Bool:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_BoolArgument");
                break;

            default:
                serializedProperty4 = serializedProperty.FindPropertyRelative("m_IntArgument");
                break;
            }
            string stringValue = serializedProperty.FindPropertyRelative("m_ObjectArgumentAssemblyTypeName").stringValue;
            Type   type        = typeof(UnityEngine.Object);

            if (!string.IsNullOrEmpty(stringValue))
            {
                type = (Type.GetType(stringValue, false) ?? typeof(UnityEngine.Object));
            }
            if (persistentListenerMode == PersistentListenerMode.Object)
            {
                EditorGUI.BeginChangeCheck();
                UnityEngine.Object objectReferenceValue = EditorGUI.ObjectField(position3, GUIContent.none, serializedProperty4.objectReferenceValue, type, true);
                if (EditorGUI.EndChangeCheck())
                {
                    serializedProperty4.objectReferenceValue = objectReferenceValue;
                }
            }
            else if (persistentListenerMode != PersistentListenerMode.Void && persistentListenerMode != PersistentListenerMode.EventDefined)
            {
                EditorGUI.PropertyField(position3, serializedProperty4, GUIContent.none);
            }
            using (new EditorGUI.DisabledScope(serializedProperty2.objectReferenceValue == null))
            {
                EditorGUI.BeginProperty(rect2, GUIContent.none, serializedProperty3);
                GUIContent content;
                if (EditorGUI.showMixedValue)
                {
                    content = EditorGUI.mixedValueContent;
                }
                else
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    if (serializedProperty2.objectReferenceValue == null || string.IsNullOrEmpty(serializedProperty3.stringValue))
                    {
                        stringBuilder.Append("No Function");
                    }
                    else if (!UnityEventDrawer.IsPersistantListenerValid(this.m_DummyEvent, serializedProperty3.stringValue, serializedProperty2.objectReferenceValue, UnityEventDrawer.GetMode(mode), type))
                    {
                        string             arg = "UnknownComponent";
                        UnityEngine.Object objectReferenceValue2 = serializedProperty2.objectReferenceValue;
                        if (objectReferenceValue2 != null)
                        {
                            arg = objectReferenceValue2.GetType().Name;
                        }
                        stringBuilder.Append(string.Format("<Missing {0}.{1}>", arg, serializedProperty3.stringValue));
                    }
                    else
                    {
                        stringBuilder.Append(serializedProperty2.objectReferenceValue.GetType().Name);
                        if (!string.IsNullOrEmpty(serializedProperty3.stringValue))
                        {
                            stringBuilder.Append(".");
                            if (serializedProperty3.stringValue.StartsWith("set_"))
                            {
                                stringBuilder.Append(serializedProperty3.stringValue.Substring(4));
                            }
                            else
                            {
                                stringBuilder.Append(serializedProperty3.stringValue);
                            }
                        }
                    }
                    content = GUIContent.Temp(stringBuilder.ToString());
                }
                if (GUI.Button(rect2, content, EditorStyles.popup))
                {
                    UnityEventDrawer.BuildPopupList(serializedProperty2.objectReferenceValue, this.m_DummyEvent, arrayElementAtIndex).DropDown(rect2);
                }
                EditorGUI.EndProperty();
            }
            GUI.backgroundColor = backgroundColor;
        }
Example #14
0
        protected virtual void DrawEventHeader(Rect headerRect)
        {
            headerRect.height = 16f;
            string text = ((!string.IsNullOrEmpty(this.m_Text)) ? this.m_Text : "Event") + UnityEventDrawer.GetEventParams(this.m_DummyEvent);

            GUI.Label(headerRect, text);
        }
Example #15
0
        private void DrawEventListener(Rect rect, int index, bool isactive, bool isfocused)
        {
            SerializedProperty arrayElementAtIndex = this.m_ListenersArray.GetArrayElementAtIndex(index);

            ++rect.y;
            Rect[]             rowRects          = this.GetRowRects(rect);
            Rect               position1         = rowRects[0];
            Rect               position2         = rowRects[1];
            Rect               rect1             = rowRects[2];
            Rect               position3         = rowRects[3];
            SerializedProperty propertyRelative1 = arrayElementAtIndex.FindPropertyRelative("m_CallState");
            SerializedProperty propertyRelative2 = arrayElementAtIndex.FindPropertyRelative("m_Mode");
            SerializedProperty propertyRelative3 = arrayElementAtIndex.FindPropertyRelative("m_Arguments");
            SerializedProperty propertyRelative4 = arrayElementAtIndex.FindPropertyRelative("m_Target");
            SerializedProperty propertyRelative5 = arrayElementAtIndex.FindPropertyRelative("m_MethodName");
            Color              backgroundColor   = GUI.backgroundColor;

            GUI.backgroundColor = Color.white;
            EditorGUI.PropertyField(position1, propertyRelative1, GUIContent.none);
            EditorGUI.BeginChangeCheck();
            GUI.Box(position2, GUIContent.none);
            EditorGUI.PropertyField(position2, propertyRelative4, GUIContent.none);
            if (EditorGUI.EndChangeCheck())
            {
                propertyRelative5.stringValue = (string)null;
            }
            PersistentListenerMode persistentListenerMode = UnityEventDrawer.GetMode(propertyRelative2);

            if (propertyRelative4.objectReferenceValue == (UnityEngine.Object)null || string.IsNullOrEmpty(propertyRelative5.stringValue))
            {
                persistentListenerMode = PersistentListenerMode.Void;
            }
            SerializedProperty propertyRelative6;

            switch (persistentListenerMode)
            {
            case PersistentListenerMode.Object:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_ObjectArgument");
                break;

            case PersistentListenerMode.Int:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_IntArgument");
                break;

            case PersistentListenerMode.Float:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_FloatArgument");
                break;

            case PersistentListenerMode.String:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_StringArgument");
                break;

            case PersistentListenerMode.Bool:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_BoolArgument");
                break;

            default:
                propertyRelative6 = propertyRelative3.FindPropertyRelative("m_IntArgument");
                break;
            }
            string stringValue = propertyRelative3.FindPropertyRelative("m_ObjectArgumentAssemblyTypeName").stringValue;

            System.Type type = typeof(UnityEngine.Object);
            if (!string.IsNullOrEmpty(stringValue))
            {
                type = System.Type.GetType(stringValue, false) ?? typeof(UnityEngine.Object);
            }
            if (persistentListenerMode == PersistentListenerMode.Object)
            {
                EditorGUI.BeginChangeCheck();
                UnityEngine.Object @object = EditorGUI.ObjectField(position3, GUIContent.none, propertyRelative6.objectReferenceValue, type, true);
                if (EditorGUI.EndChangeCheck())
                {
                    propertyRelative6.objectReferenceValue = @object;
                }
            }
            else if (persistentListenerMode != PersistentListenerMode.Void && persistentListenerMode != PersistentListenerMode.EventDefined)
            {
                EditorGUI.PropertyField(position3, propertyRelative6, GUIContent.none);
            }
            EditorGUI.BeginDisabledGroup(propertyRelative4.objectReferenceValue == (UnityEngine.Object)null);
            EditorGUI.BeginProperty(rect1, GUIContent.none, propertyRelative5);
            GUIContent content;

            if (EditorGUI.showMixedValue)
            {
                content = EditorGUI.mixedValueContent;
            }
            else
            {
                StringBuilder stringBuilder = new StringBuilder();
                if (propertyRelative4.objectReferenceValue == (UnityEngine.Object)null || string.IsNullOrEmpty(propertyRelative5.stringValue))
                {
                    stringBuilder.Append("No Function");
                }
                else if (!UnityEventDrawer.IsPersistantListenerValid(this.m_DummyEvent, propertyRelative5.stringValue, propertyRelative4.objectReferenceValue, UnityEventDrawer.GetMode(propertyRelative2), type))
                {
                    string             str = "UnknownComponent";
                    UnityEngine.Object objectReferenceValue = propertyRelative4.objectReferenceValue;
                    if (objectReferenceValue != (UnityEngine.Object)null)
                    {
                        str = objectReferenceValue.GetType().Name;
                    }
                    stringBuilder.Append(string.Format("<Missing {0}.{1}>", (object)str, (object)propertyRelative5.stringValue));
                }
                else
                {
                    stringBuilder.Append(propertyRelative4.objectReferenceValue.GetType().Name);
                    if (!string.IsNullOrEmpty(propertyRelative5.stringValue))
                    {
                        stringBuilder.Append(".");
                        if (propertyRelative5.stringValue.StartsWith("set_"))
                        {
                            stringBuilder.Append(propertyRelative5.stringValue.Substring(4));
                        }
                        else
                        {
                            stringBuilder.Append(propertyRelative5.stringValue);
                        }
                    }
                }
                content = GUIContent.Temp(stringBuilder.ToString());
            }
            if (GUI.Button(rect1, content, EditorStyles.popup))
            {
                UnityEventDrawer.BuildPopupList(propertyRelative4.objectReferenceValue, this.m_DummyEvent, arrayElementAtIndex).DropDown(rect1);
            }
            EditorGUI.EndProperty();
            EditorGUI.EndDisabledGroup();
            GUI.backgroundColor = backgroundColor;
        }
 private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, UnityEventDrawer.ValidMethodMap method, string targetName)
 {
   PersistentListenerMode mode1 = method.mode;
   UnityEngine.Object objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
   string stringValue = listener.FindPropertyRelative("m_MethodName").stringValue;
   PersistentListenerMode mode2 = UnityEventDrawer.GetMode(listener.FindPropertyRelative("m_Mode"));
   SerializedProperty propertyRelative = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
   StringBuilder stringBuilder = new StringBuilder();
   int length = method.methodInfo.GetParameters().Length;
   for (int index = 0; index < length; ++index)
   {
     System.Reflection.ParameterInfo parameter = method.methodInfo.GetParameters()[index];
     stringBuilder.Append(string.Format("{0}", (object) UnityEventDrawer.GetTypeName(parameter.ParameterType)));
     if (index < length - 1)
       stringBuilder.Append(", ");
   }
   bool on = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode1 == mode2;
   if (on && mode1 == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
     on &= method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == propertyRelative.stringValue;
   string formattedMethodName = UnityEventDrawer.GetFormattedMethodName(targetName, method.methodInfo.Name, stringBuilder.ToString(), mode1 == PersistentListenerMode.EventDefined);
   menu.AddItem(new GUIContent(formattedMethodName), on, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), (object) new UnityEventDrawer.UnityEventFunction(listener, method.target, method.methodInfo, mode1));
 }
		private static void AddFunctionsForScript(GenericMenu menu, SerializedProperty listener, UnityEventDrawer.ValidMethodMap method, string targetName)
		{
			PersistentListenerMode mode = method.mode;
			UnityEngine.Object objectReferenceValue = listener.FindPropertyRelative("m_Target").objectReferenceValue;
			string stringValue = listener.FindPropertyRelative("m_MethodName").stringValue;
			PersistentListenerMode mode2 = UnityEventDrawer.GetMode(listener.FindPropertyRelative("m_Mode"));
			SerializedProperty serializedProperty = listener.FindPropertyRelative("m_Arguments").FindPropertyRelative("m_ObjectArgumentAssemblyTypeName");
			StringBuilder stringBuilder = new StringBuilder();
			int num = method.methodInfo.GetParameters().Length;
			for (int i = 0; i < num; i++)
			{
				ParameterInfo parameterInfo = method.methodInfo.GetParameters()[i];
				stringBuilder.Append(string.Format("{0}", UnityEventDrawer.GetTypeName(parameterInfo.ParameterType)));
				if (i < num - 1)
				{
					stringBuilder.Append(", ");
				}
			}
			bool flag = objectReferenceValue == method.target && stringValue == method.methodInfo.Name && mode == mode2;
			if (flag && mode == PersistentListenerMode.Object && method.methodInfo.GetParameters().Length == 1)
			{
				flag &= (method.methodInfo.GetParameters()[0].ParameterType.AssemblyQualifiedName == serializedProperty.stringValue);
			}
			string formattedMethodName = UnityEventDrawer.GetFormattedMethodName(targetName, method.methodInfo.Name, stringBuilder.ToString(), mode == PersistentListenerMode.EventDefined);
			menu.AddItem(new GUIContent(formattedMethodName), flag, new GenericMenu.MenuFunction2(UnityEventDrawer.SetEventFunction), new UnityEventDrawer.UnityEventFunction(listener, method.target, method.methodInfo, mode));
		}