public static object PropertyField(object obj, GUIContent label, ref bool dataChanged, GUIStyle style, params GUILayoutOption[] options) { ComponentVoidMethodRef componentMethodRef = (ComponentVoidMethodRef)obj; bool methodChanged = false; ComponentMethodRef <object> methodRef = ComponentMethodRefEditor.ComponentMethodRefField(componentMethodRef.GetMethodRef(), typeof(void), label, ref methodChanged); if (methodChanged) { componentMethodRef = new ComponentVoidMethodRef(methodRef); dataChanged = true; } return(componentMethodRef); }
public ComponentVoidMethodRef(ComponentMethodRef <object> methodRef) { _methodRef = methodRef; }
public static ComponentMethodRef <T> ComponentMethodRefField <T>(ComponentMethodRef <T> componentMethodRef, Type returnType, GUIContent label, ref bool dataChanged) { if (label == null) { label = new GUIContent(); } label.text += " (" + componentMethodRef + ")"; bool editorCollapsed = !EditorGUILayout.Foldout(!componentMethodRef._editorCollapsed, label); if (editorCollapsed != componentMethodRef._editorCollapsed) { componentMethodRef._editorCollapsed = editorCollapsed; dataChanged = true; } if (!editorCollapsed) { int origIndent = EditorGUI.indentLevel; EditorGUI.indentLevel++; bool componentChanged = false; ComponentRef <Component> component = SerializationEditorGUILayout.ObjectField(componentMethodRef.GetComponentRef(), new GUIContent("Object"), ref componentChanged); Component currentComponent = component.GetBaseComponent(); if (currentComponent != null) { string[] methodNames = GetMethods(currentComponent, returnType); if (methodNames.Length > 0) { int currentIndex = 0; for (int i = 0; i < methodNames.Length; i++) { if (methodNames[i] == componentMethodRef.GetMethodName()) { currentIndex = i; break; } } EditorGUI.BeginChangeCheck(); int newIndex = EditorGUILayout.Popup("Method", currentIndex, methodNames); if (EditorGUI.EndChangeCheck() || componentChanged) { componentMethodRef = new ComponentMethodRef <T>(component, methodNames[newIndex]); dataChanged = true; } } else if (componentChanged) { componentMethodRef = new ComponentMethodRef <T>(component, string.Empty); dataChanged = true; } } else if (componentChanged) { componentMethodRef = new ComponentMethodRef <T>(component, string.Empty); dataChanged = true; } EditorGUI.indentLevel = origIndent; } return(componentMethodRef); }