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)); }
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); } }
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 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); }
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; }
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); } }
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); }
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); } }
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); } }
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); }
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; } } } }
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; }
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); }
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)); }