Exemplo n.º 1
0
        private void HandlePackableListUI()
        {
            var currentEvent = Event.current;
            var usedEvent    = false;

            Rect rect = EditorGUILayout.GetControlRect();

            var controlID = EditorGUIUtility.s_LastControlID;

            switch (currentEvent.type)
            {
            case EventType.DragExited:
                if (GUI.enabled)
                {
                    HandleUtility.Repaint();
                }
                break;

            case EventType.DragUpdated:
            case EventType.DragPerform:
                if (rect.Contains(currentEvent.mousePosition) && GUI.enabled)
                {
                    // Check each single object, so we can add multiple objects in a single drag.
                    var didAcceptDrag = false;
                    var references    = DragAndDrop.objectReferences;
                    foreach (var obj in references)
                    {
                        if (IsPackable(obj))
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                            if (currentEvent.type == EventType.DragPerform)
                            {
                                m_Packables.AppendFoldoutPPtrValue(obj);
                                didAcceptDrag = true;
                                DragAndDrop.activeControlID = 0;
                            }
                            else
                            {
                                DragAndDrop.activeControlID = controlID;
                            }
                        }
                    }
                    if (didAcceptDrag)
                    {
                        GUI.changed = true;
                        DragAndDrop.AcceptDrag();
                        usedEvent = true;
                    }
                }
                break;

            case EventType.ValidateCommand:
                if (currentEvent.commandName == ObjectSelector.ObjectSelectorClosedCommand && ObjectSelector.get.objectSelectorID == styles.packableSelectorHash)
                {
                    usedEvent = true;
                }
                break;

            case EventType.ExecuteCommand:
                if (currentEvent.commandName == ObjectSelector.ObjectSelectorClosedCommand && ObjectSelector.get.objectSelectorID == styles.packableSelectorHash)
                {
                    var obj = ObjectSelector.GetCurrentObject();
                    if (IsPackable(obj))
                    {
                        m_Packables.AppendFoldoutPPtrValue(obj);
                        m_PackableList.index = m_Packables.arraySize - 1;
                    }

                    usedEvent = true;
                }
                break;
            }

            // Handle Foldout after we handle the current event because Foldout might process the drag and drop event and used it.
            m_PackableListExpanded = EditorGUI.Foldout(rect, m_PackableListExpanded, styles.packableListLabel, true);

            if (usedEvent)
            {
                currentEvent.Use();
            }

            if (m_PackableListExpanded)
            {
                EditorGUI.indentLevel++;
                m_PackableList.DoLayoutList();
                EditorGUI.indentLevel--;
            }
        }
Exemplo n.º 2
0
        private void HandlePackableListUI()
        {
            Event current         = Event.current;
            bool  flag            = false;
            Rect  controlRect     = EditorGUILayout.GetControlRect(new GUILayoutOption[0]);
            int   s_LastControlID = EditorGUIUtility.s_LastControlID;

            switch (current.type)
            {
            case EventType.DragUpdated:
            case EventType.DragPerform:
                if (controlRect.Contains(current.mousePosition) && GUI.enabled)
                {
                    bool flag2 = false;
                    UnityEngine.Object[] objectReferences = DragAndDrop.objectReferences;
                    UnityEngine.Object[] array            = objectReferences;
                    for (int i = 0; i < array.Length; i++)
                    {
                        UnityEngine.Object @object = array[i];
                        if (SpriteAtlasInspector.IsPackable(@object))
                        {
                            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
                            if (current.type == EventType.DragPerform)
                            {
                                this.m_Packables.AppendFoldoutPPtrValue(@object);
                                flag2 = true;
                                DragAndDrop.activeControlID = 0;
                            }
                            else
                            {
                                DragAndDrop.activeControlID = s_LastControlID;
                            }
                        }
                    }
                    if (flag2)
                    {
                        GUI.changed = true;
                        DragAndDrop.AcceptDrag();
                        flag = true;
                    }
                }
                break;

            case EventType.ValidateCommand:
                if (current.commandName == "ObjectSelectorClosed" && ObjectSelector.get.objectSelectorID == SpriteAtlasInspector.s_Styles.packableSelectorHash)
                {
                    flag = true;
                }
                break;

            case EventType.ExecuteCommand:
                if (current.commandName == "ObjectSelectorClosed" && ObjectSelector.get.objectSelectorID == SpriteAtlasInspector.s_Styles.packableSelectorHash)
                {
                    UnityEngine.Object currentObject = ObjectSelector.GetCurrentObject();
                    if (SpriteAtlasInspector.IsPackable(currentObject))
                    {
                        this.m_Packables.AppendFoldoutPPtrValue(currentObject);
                        this.m_PackableList.index = this.m_Packables.arraySize - 1;
                    }
                    flag = true;
                }
                break;

            case EventType.DragExited:
                if (GUI.enabled)
                {
                    HandleUtility.Repaint();
                }
                break;
            }
            this.m_PackableListExpanded = EditorGUI.Foldout(controlRect, this.m_PackableListExpanded, SpriteAtlasInspector.s_Styles.packableListLabel, true);
            if (flag)
            {
                current.Use();
            }
            if (this.m_PackableListExpanded)
            {
                EditorGUI.indentLevel++;
                this.m_PackableList.DoLayoutList();
                EditorGUI.indentLevel--;
            }
        }