Пример #1
0
        void ShowAddEventMenu()
        {
            // Now create the menu, add items and show it
            GenericMenu menu = new GenericMenu();

            for (int i = 0; i < m_EventTypes.Length; ++i)
            {
                bool active = true;

                // Check if we already have a Entry for the current eventType, if so, disable it
                for (int p = 0; p < m_EventTriggerListProperty.arraySize; ++p)
                {
                    UEventTrigger.EventEntry delegateEntry = m_CurrentEventTrigger.Triggers[p];

                    if ((int)delegateEntry.eventID == i)
                    {
                        active = false;
                    }
                }
                if (active)
                {
                    menu.AddItem(m_EventTypes[i], false, OnAddNewSelected, i);
                }
                else
                {
                    menu.AddDisabledItem(m_EventTypes[i]);
                }
            }
            menu.ShowAsContext();
            Event.current.Use();
        }
Пример #2
0
        public override void OnInspectorGUI()
        {
            SetGUIStyles();

            serializedObject.Update();
            int toBeRemovedEntry = -1;

            EditorGUILayout.Space();

            Vector2 removeButtonSize = GUIStyle.none.CalcSize(m_IconToolbarMinus);
            Vector2 plusButtonSize   = GUIStyle.none.CalcSize(m_IconToolbarPlus);

            for (int i = 0; i < m_EventTriggerListProperty.arraySize; ++i)
            {
                m_CurrentEventEntry = m_CurrentEventTrigger.Triggers[i];
                EventTriggerType entryID = m_CurrentEventEntry.eventID;

                EditorGUILayout.BeginVertical();

                float viewWidth = EditorGUIUtility.currentViewWidth - removeButtonSize.x - plusButtonSize.x - 32;

                m_EventTriggerToggleGroup[i] = GUILayout.Toggle(m_EventTriggerToggleGroup[i], eventNames[(int)entryID], "Foldout", GUILayout.Width(viewWidth));

                #region 移除Event 和 增加Event.Handler
                Rect callbackRect    = GUILayoutUtility.GetLastRect();
                Rect removeButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, callbackRect.y + 1, removeButtonSize.x, removeButtonSize.y);
                if (GUI.Button(removeButtonPos, m_IconToolbarMinus, GUIStyle.none))
                {
                    toBeRemovedEntry = i;
                }

                Rect plusButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonPos.width - plusButtonSize.x - 8, callbackRect.y + 1, plusButtonSize.x, plusButtonSize.y);
                if (GUI.Button(plusButtonPos, m_IconToolbarPlus, GUIStyle.none))
                {
                    ShowAddHandlerMenu();
                    toBeAddEntry = i;
                }
                #endregion

                if (m_EventTriggerToggleGroup[i])
                {
                    SerializedProperty eventEntryProperty = m_EventTriggerListProperty.GetArrayElementAtIndex(i);
                    if (eventEntryProperty != null)
                    {
                        SerializedProperty eventHandlerList = eventEntryProperty.FindPropertyRelative("m_EventHandlerList");
                        if (eventHandlerList != null)
                        {
                            int toBeRemoveHandler = -1;

                            for (int j = 0; j < eventHandlerList.arraySize; ++j)
                            {
                                SerializedProperty handler = eventHandlerList.GetArrayElementAtIndex(j);
                                if (handler != null)
                                {
                                    m_EventIDName.text = eventHandlerNames[handler.FindPropertyRelative("m_handlerType").enumValueIndex];

                                    EditorGUILayout.BeginVertical(m_VerticalGroupStyle);

                                    EditorGUILayout.LabelField(m_EventIDName, m_EventHandlerLabelStyle);

                                    Rect handlerRemoveRect      = GUILayoutUtility.GetLastRect();
                                    Rect handlerremoveButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, handlerRemoveRect.y + 1, removeButtonSize.x, removeButtonSize.y);
                                    if (GUI.Button(handlerremoveButtonPos, m_IconToolbarMinus, GUIStyle.none))
                                    {
                                        toBeRemoveHandler = j;
                                    }
                                    DrawHandlerInfoProperty(entryID, handler);

                                    EditorGUILayout.EndVertical();
                                    EditorGUILayout.Space();
                                }
                            }

                            if (toBeRemoveHandler > -1)
                            {
                                eventHandlerList.DeleteArrayElementAtIndex(toBeRemoveHandler);
                            }
                        }
                    }



                    //if (m_CurrentEventEntry.EventHandlerList != null)
                    //{
                    //    int toBeRemoveHandler = -1;
                    //    for (int j = 0; j < m_CurrentEventEntry.EventHandlerList.Count; ++j)
                    //    {
                    //        EventHandlerBase handler = m_CurrentEventEntry.EventHandlerList[j];

                    //        m_EventIDName.text = eventHandlerNames[(int)handler.HandlerType];

                    //        EditorGUILayout.BeginVertical(m_VerticalGroupStyle);

                    //        EditorGUILayout.LabelField(m_EventIDName, m_EventHandlerLabelStyle);

                    //        Rect handlerRemoveRect = GUILayoutUtility.GetLastRect();
                    //        Rect handlerremoveButtonPos = new Rect(EditorGUIUtility.currentViewWidth - removeButtonSize.x - 8, handlerRemoveRect.y + 1, removeButtonSize.x, removeButtonSize.y);
                    //        if (GUI.Button(handlerremoveButtonPos, m_IconToolbarMinus, GUIStyle.none))
                    //        {
                    //            toBeRemoveHandler = j;
                    //        }

                    //        //EditorGUI.LabelField(handlerRect,m_EventIDName);
                    //        DrawHandlerInfo(handler);
                    //        EditorGUILayout.EndVertical();
                    //        EditorGUILayout.Space();
                    //    }

                    //    if (toBeRemoveHandler > -1)
                    //    {
                    //        m_CurrentEventEntry.EventHandlerList.RemoveAt(toBeRemoveHandler);
                    //    }
                    //}

                    EditorGUILayout.Space();
                }

                EditorGUILayout.EndVertical();
            }

            if (toBeRemovedEntry > -1)
            {
                RemoveEntry(toBeRemovedEntry);
            }

            Rect        btPosition    = GUILayoutUtility.GetRect(m_AddButonContent, GUI.skin.button);
            const float addButonWidth = 200f;
            btPosition.x     = btPosition.x + (btPosition.width - addButonWidth) / 2;
            btPosition.width = addButonWidth;
            if (GUI.Button(btPosition, m_AddButonContent))
            {
                ShowAddEventMenu();
            }

            serializedObject.ApplyModifiedProperties();
        }