示例#1
0
    void CreateEditorButtonStates(MethodInfo[] methods)
    {
        editorButtonStates = new EditorButtonState[methods.Length];
        int methodIndex = 0;

        foreach (var methodInfo in methods)
        {
            editorButtonStates [methodIndex] = new EditorButtonState(methodInfo.GetParameters().Length);
            methodIndex++;
        }
    }
示例#2
0
    void DrawButtonforMethod(object[] invokationTargets, MethodInfo methodInfo, EditorButtonState state)
    {
        EditorGUILayout.BeginHorizontal();
        var foldoutRect = EditorGUILayout.GetControlRect(GUILayout.Width(10.0f));

        state.opened = EditorGUI.Foldout(foldoutRect, state.opened, "");
        bool clicked = GUILayout.Button(MethodDisplayName(methodInfo), GUILayout.ExpandWidth(true));

        EditorGUILayout.EndHorizontal();

        if (state.opened)
        {
            EditorGUI.indentLevel++;
            int paramIndex = 0;
            foreach (ParameterInfo parameterInfo in methodInfo.GetParameters())
            {
                object currentVal = state.parameters [paramIndex];
                state.parameters[paramIndex] = DrawParameterInfo(parameterInfo, currentVal);
                paramIndex++;
            }
            EditorGUI.indentLevel--;
        }

        if (clicked)
        {
            foreach (var invokationTarget in invokationTargets)
            {
                var    monoTarget = invokationTarget as MonoBehaviour;
                object returnVal  = methodInfo.Invoke(monoTarget, state.parameters);

                if (returnVal is IEnumerator)
                {
                    monoTarget.StartCoroutine((IEnumerator)returnVal);
                }
                else if (returnVal != null)
                {
                    Debug.Log("Method call result -> " + returnVal);
                }
            }
        }
    }
示例#3
0
        private void DrawButtonforMethod(MonoBehaviour target, MethodInfo methodInfo, EditorButtonState state)
        {
            EditorGUILayout.BeginHorizontal();
            var ba = (InspectorButtonAttribute)Attribute.GetCustomAttribute(methodInfo,
                                                                            typeof(InspectorButtonAttribute));

            GUI.enabled = !EditorApplication.isCompiling &&
                          (ba.Mode == InspectorDiplayMode.AlwaysEnabled || (EditorApplication.isPlaying
                               ? ba.Mode == InspectorDiplayMode.EnabledInPlayMode
                               : ba.Mode == InspectorDiplayMode.DisabledInPlayMode));

            var paramsNum = methodInfo.GetParameters().Length;

            if (paramsNum > 0)
            {
                var foldoutRect = EditorGUILayout.GetControlRect(GUILayout.Width(10.0f));
                state.Opened = EditorGUI.Foldout(foldoutRect, state.Opened, "");
            }
            else
            {
                state.Opened = false;
            }

            var showName = string.IsNullOrEmpty(ba.MethodName) ? MethodDisplayName(methodInfo) : ba.MethodName;
            var clicked  = GUILayout.Button(showName, GUILayout.ExpandWidth(true));

            GUI.enabled = true;
            EditorGUILayout.EndHorizontal();

            if (state.Opened)
            {
                EditorGUI.indentLevel++;
                var paramIndex = 0;
                foreach (var parameterInfo in methodInfo.GetParameters())
                {
                    var currentVal = state.Parameters[paramIndex];
                    state.Parameters[paramIndex] = DrawParameterInfo(parameterInfo, currentVal);
                    paramIndex++;
                }

                EditorGUI.indentLevel--;
            }

            if (clicked)
            {
                var returnVal = methodInfo.Invoke(target, state.Parameters);

                if (returnVal is IEnumerator)
                {
                    IEnumerator enumerator = returnVal as IEnumerator;
                    target.StartCoroutine(enumerator);
                }
                else if (returnVal != null)
                {
                    Debug.Log("Method call result -> " + returnVal);
                }
            }
        }