Exemplo n.º 1
0
    void OnGUI()
    {
        if (isAtlasDirty)
        {
            EditorUtility.SetDirty(uftAtlas);
            isAtlasDirty = false;
        }
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) });
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas:");
        string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName);

        if (newName != uftAtlas.atlasName)
        {
            uftAtlas.atlasName = newName;
        }

        UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false);

        if (newMeta != atlasMetadata)
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null)
                {
                    UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta);
                }
                atlasMetadata = newMeta;
            }
        }

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("new"))
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                onClickNew();
            }
        }
        if (GUILayout.Button("save"))
        {
            onClickSave();
        }
        EditorGUILayout.EndHorizontal();
        UFTAtlasSize newWidth  = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth);
        UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight);



        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Allign:");

        uftAtlas.borderSize = EditorGUILayout.IntField("border size", uftAtlas.borderSize);
        if (GUILayout.Button("allign") && uftAtlas != null && uftAtlas.atlasEntries.Count > 0)
        {
            uftAtlas.arrangeEntriesUsingUnityPackager();
        }



        if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight)
        {
            uftAtlas.atlasWidth  = newWidth;
            uftAtlas.atlasHeight = newHeight;

            if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null)
            {
                UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight);
            }
        }

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:");
        if (uftAtlas.atlasEntries.Count > 0)
        {
            if (GUILayout.Button("trim alpha"))
            {
                uftAtlas.trimAllEntries();
            }
        }
        atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition);

        if (uftAtlas.atlasEntries.Count > 0)
        {
            List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString));
            names.Sort();
            foreach (string name in names)
            {
                EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f));
            }
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);


        GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight);
        uftAtlas.OnGUI();

        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();


        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform)
        {
            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;     // show a drag-add icon on the mouse cursor
            if (Event.current.type == EventType.dragPerform)
            {
                HandleDroppedObjects(DragAndDrop.objectReferences);
            }

            DragAndDrop.AcceptDrag();
            Event.current.Use();
        }
    }
Exemplo n.º 2
0
    void OnGUI()
    {
        if (isAtlasDirty)
        {
            EditorUtility.SetDirty(uftAtlas);
            isAtlasDirty = false;
        }
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        EditorGUILayout.BeginVertical(new GUILayoutOption[] { GUILayout.Width(200f) });
        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas:");
        string newName = EditorGUILayout.TextField("name", uftAtlas.atlasName);

        if (newName != uftAtlas.atlasName)
        {
            uftAtlas.atlasName = newName;
        }

        UFTAtlasMetadata newMeta = (UFTAtlasMetadata)EditorGUILayout.ObjectField((Object)atlasMetadata, typeof(UFTAtlasMetadata), false);

        if (newMeta != atlasMetadata)
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                if (UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged != null)
                {
                    UFTAtlasEditorEventManager.onAtlasMetadataObjectChanged(newMeta);
                }
                atlasMetadata = newMeta;
            }
        }

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("new"))
        {
            if (uftAtlas.atlasEntries.Count == 0 || (uftAtlas.atlasEntries.Count > 0 && EditorUtility.DisplayDialog("This action will remove all existing textures on your atlas", "Do you want to proceed?", "Proceed", "Cancel")))
            {
                onClickNew();
            }
        }
        if (GUILayout.Button("save"))
        {
            onClickSave();
        }
        EditorGUILayout.EndHorizontal();

        UFTAtlasSize newWidth  = (UFTAtlasSize)EditorGUILayout.EnumPopup("width", uftAtlas.atlasWidth);
        UFTAtlasSize newHeight = (UFTAtlasSize)EditorGUILayout.EnumPopup("height", uftAtlas.atlasHeight);

        uftAtlas.currentDragMode = (UFTAtlas.DragMode)EditorGUILayout.EnumPopup(uftAtlas.currentDragMode);

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Align:");

        uftAtlas.borderSize = Mathf.Max(0, EditorGUILayout.IntField("border size", uftAtlas.borderSize));
        bool autoAlign   = GUILayout.Button("auto align & size");
        bool normalAlign = GUILayout.Button("align");

        if ((autoAlign || normalAlign) && uftAtlas != null && uftAtlas.atlasEntries.Count > 0)
        {
            bool successful = true;
            if (normalAlign)
            {
                successful = uftAtlas.arrangeEntriesUsingUnityPackager();
            }
            if (autoAlign)
            {
                UFTAtlasSize oldWidth  = uftAtlas.atlasWidth;
                UFTAtlasSize oldHeight = uftAtlas.atlasHeight;

                int w = (int)128;
                int h = (int)128;

                while (true)
                {
                    uftAtlas.atlasHeight = (UFTAtlasSize)(w);
                    uftAtlas.atlasWidth  = (UFTAtlasSize)(h);
                    if (uftAtlas.arrangeEntriesUsingUnityPackager())
                    {
                        break;
                    }

                    if (uftAtlas.atlasWidth == UFTAtlasSize._4096 && uftAtlas.atlasHeight == UFTAtlasSize._4096)
                    {
                        successful = false;
                        break;
                    }

                    uftAtlas.atlasHeight = (UFTAtlasSize)(w * 2);
                    uftAtlas.atlasWidth  = (UFTAtlasSize)(h);
                    if (uftAtlas.arrangeEntriesUsingUnityPackager())
                    {
                        break;
                    }

                    uftAtlas.atlasHeight = (UFTAtlasSize)(w);
                    uftAtlas.atlasWidth  = (UFTAtlasSize)(h * 2);
                    if (uftAtlas.arrangeEntriesUsingUnityPackager())
                    {
                        break;
                    }

                    w *= 2;
                    h *= 2;
                }

                if (!successful)
                {
                    uftAtlas.atlasWidth  = oldWidth;
                    uftAtlas.atlasHeight = oldHeight;
                }
                else if (uftAtlas.atlasWidth != oldWidth || uftAtlas.atlasHeight != oldHeight)
                {
                    newWidth  = uftAtlas.atlasWidth;
                    newHeight = uftAtlas.atlasHeight;

                    uftAtlas.atlasWidth  = oldWidth;
                    uftAtlas.atlasHeight = oldHeight;
                }
            }
            if (successful)
            {
                alignSuccesful = "Alignment successful. ";
            }
            else
            {
                alignSuccesful = "Alignment failed! Try extending atlas size";
            }
        }

        GUILayout.Label(alignSuccesful);

        if (newWidth != uftAtlas.atlasWidth || newHeight != uftAtlas.atlasHeight)
        {
            uftAtlas.atlasWidth  = newWidth;
            uftAtlas.atlasHeight = newHeight;

            if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null)
            {
                UFTAtlasEditorEventManager.onAtlasSizeChanged((int)newWidth, (int)newHeight);
            }
        }

        EditorGUILayout.Separator();
        EditorGUILayout.LabelField("Atlas Textures [" + uftAtlas.atlasEntries.Count + "]:");
        atlasTexturesScrollPosition = EditorGUILayout.BeginScrollView(atlasTexturesScrollPosition);

        if (uftAtlas.atlasEntries.Count > 0)
        {
            List <string> names = uftAtlas.atlasEntries.ConvertAll(new System.Converter <UFTAtlasEntry, string>(uftAtlasEntryToString));
            names.Sort();
            foreach (string name in names)
            {
                EditorGUILayout.BeginHorizontal();
                GUI.color = Color.red;
                if (GUILayout.Button("x"))
                {
                    int index = uftAtlas.atlasEntries.FindIndex(o => o.textureName == name);
                    uftAtlas.atlasEntries.RemoveAt(index);
                }
                GUI.color = Color.white;
                EditorGUILayout.LabelField(name, GUILayout.MaxWidth(220f));
                EditorGUILayout.EndHorizontal();
            }
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        EditorGUILayout.Separator();
        EditorGUILayout.BeginHorizontal();

        scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);


        GUILayoutUtility.GetRect((int)uftAtlas.atlasWidth, (int)uftAtlas.atlasHeight);
        uftAtlas.OnGUI();

        EditorGUILayout.EndScrollView();
        EditorGUILayout.Separator();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();


        EditorGUILayout.EndHorizontal();

        EditorGUILayout.Separator();

        if (Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragPerform)
        {
            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;     // show a drag-add icon on the mouse cursor
            if (Event.current.type == EventType.dragPerform)
            {
                HandleDroppedObjects(DragAndDrop.objectReferences);
            }

            DragAndDrop.AcceptDrag();
            Event.current.Use();
        }
    }