Exemple #1
0
 public void sendEventAtlasWidthHeightChanged()
 {
     if (UFTAtlasEditorEventManager.onAtlasSizeChanged != null)
     {
         UFTAtlasEditorEventManager.onAtlasSizeChanged((int)atlasWidth, (int)atlasHeight);
     }
 }
Exemple #2
0
 private void Repaint()
 {
     if (UFTAtlasEditorEventManager.onNeedToRepaint != null)
     {
         UFTAtlasEditorEventManager.onNeedToRepaint();
     }
 }
Exemple #3
0
 private void sendEventAtlasChanged()
 {
     if (UFTAtlasEditorEventManager.onAtlasChange != null)
     {
         UFTAtlasEditorEventManager.onAtlasChange();
     }
 }
Exemple #4
0
    void removeLatestEntryFromList()
    {
        UFTAtlasEntry latestEntry = atlasEntries[atlasEntries.Count - 1];

        if (UFTAtlasEditorEventManager.onRemoveEntry != null)
        {
            UFTAtlasEditorEventManager.onRemoveEntry(latestEntry);
        }
        atlasEntries.Remove(latestEntry);
        sendEventAtlasChanged();
    }
Exemple #5
0
    //return true if texture has been trimmed, or false if not
    public bool trimTexture()
    {
        Texture2D newTexture = UFTTextureUtil.trimTextureAlpha(texture);

        if (newTexture != texture)
        {
            canvasRect.width  = newTexture.width;
            canvasRect.height = newTexture.height;
            isTrimmed         = true;
            texture           = newTexture;
            if (UFTAtlasEditorEventManager.onTextureSizeChanged != null)
            {
                UFTAtlasEditorEventManager.onTextureSizeChanged(this);
            }
            return(true);
        }
        return(false);
    }
    public void addNewEntry(Texture2D texture, string assetPath)
    {
        string name = assetPath.Substring(assetPath.LastIndexOf('/') + 1);

        Rect          rect          = new Rect(0, 0, texture.width, texture.height);
        UFTAtlasEntry uftAtlasEntry = UFTAtlasEntry.CreateInstance <UFTAtlasEntry>();

        uftAtlasEntry.assetPath   = assetPath;
        uftAtlasEntry.textureName = name;
        uftAtlasEntry.canvasRect  = rect;
        uftAtlasEntry.texture     = texture;
        uftAtlasEntry.uftAtlas    = this;
        atlasEntries.Add(uftAtlasEntry);
        if (UFTAtlasEditorEventManager.onAddNewEntry != null)
        {
            UFTAtlasEditorEventManager.onAddNewEntry(uftAtlasEntry);
        }
        sendEventAtlasChanged();
    }
    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();
        }
    }
Exemple #8
0
    public void OnGUI()
    {
        UFTAtlas.DragMode dragMode = _uftAtlas.currentDragMode;
        if (Event.current.type == EventType.MouseUp || ((isDragging || isPivotReposition) && stopDragging))
        {
            textureState = UFTTextureState.passive;
            if (isDragging || isPivotReposition)
            {
                isDragging        = false;
                isPivotReposition = false;
                if (UFTAtlasEditorEventManager.onStopDragging != null)
                {
                    UFTAtlasEditorEventManager.onStopDragging(this);
                }
                if (UFTAtlasEditorEventManager.onAtlasChange != null)
                {
                    UFTAtlasEditorEventManager.onAtlasChange();
                }
            }
        }
        else if (Event.current.type == EventType.MouseDown && canvasRect.Contains(Event.current.mousePosition))
        {
            Vector2 uv = Event.current.mousePosition - new Vector2(canvasRect.xMin, canvasRect.yMin);
            if (dragMode == UFTAtlas.DragMode.DragPivotOnly ||
                ((pivot - uv).magnitude < 6f && dragMode == UFTAtlas.DragMode.DragImageOrPivot))
            {
                isPivotReposition = true;
            }
            else
            {
                isDragging = true;
            }
            textureState       = UFTTextureState.onDrag;
            mouseStartPosition = Event.current.mousePosition;
            if (UFTAtlasEditorEventManager.onStartDragging != null)
            {
                UFTAtlasEditorEventManager.onStartDragging(this);
            }
            Event.current.Use();
            stopDragging = false;
        }
        Color color = GUI.color;

        if (isPivotReposition)
        {
            if (Event.current.type == EventType.Repaint)
            {
                pivot = Event.current.mousePosition - canvasRect.min;

                pivot.x = Mathf.Clamp(pivot.x, 0f, canvasRect.width);
                pivot.y = Mathf.Clamp(pivot.y, 0f, canvasRect.height);

                mouseStartPosition = Event.current.mousePosition;
            }

            if (UFTAtlasEditorEventManager.onDragInProgress != null)
            {
                UFTAtlasEditorEventManager.onDragInProgress();
            }

            //if dragging lets color it to drag color border
            GUI.color = UFTTextureUtil.borderColorDict[UFTTextureState.onDrag];

            // check is mouse under texture, if not, initialize dropping
            if (Event.current.type == EventType.Repaint && !canvasRect.Contains(Event.current.mousePosition))
            {
                stopDragging = true;
            }
        }

        if (isDragging)
        {
            Vector2 currentOffset = Event.current.mousePosition - mouseStartPosition;
            if (Event.current.type == EventType.Repaint)
            {
                canvasRect.x += currentOffset.x;
                canvasRect.y += currentOffset.y;

                if (canvasRect.x < 0)
                {
                    canvasRect.x = 0;
                }

                if (canvasRect.y < 0)
                {
                    canvasRect.y = 0;
                }

                if (canvasRect.xMax > (int)uftAtlas.atlasWidth)
                {
                    canvasRect.x = (int)uftAtlas.atlasWidth - texture.width;
                }

                if (canvasRect.yMax > (int)uftAtlas.atlasHeight)
                {
                    canvasRect.y = (int)uftAtlas.atlasHeight - texture.height;
                }

                mouseStartPosition = Event.current.mousePosition;
            }
            if (UFTAtlasEditorEventManager.onDragInProgress != null)
            {
                UFTAtlasEditorEventManager.onDragInProgress();
            }

            //if dragging lets color it to drag color border
            GUI.color = UFTTextureUtil.borderColorDict[UFTTextureState.onDrag];

            // check is mouse under texture, if not, initialize dropping
            if (Event.current.type == EventType.Repaint && !canvasRect.Contains(Event.current.mousePosition))
            {
                stopDragging = true;
            }
        }

        if (isSizeInvalid)
        {
            long currentTime = System.DateTime.Now.Ticks;

            if (controlBlinkTime == null)
            {
                controlBlinkTime  = currentTime + blinkTimeout;
                currentBlinkColor = blinkColor1;
            }

            if (controlBlinkTime <= currentTime)
            {
                controlBlinkTime  = currentTime + blinkTimeout;
                currentBlinkColor = (currentBlinkColor == blinkColor1)?blinkColor2:blinkColor1;
            }
            GUI.color = currentBlinkColor;
            if (UFTAtlasEditorEventManager.onNeedToRepaint != null)
            {
                UFTAtlasEditorEventManager.onNeedToRepaint();
            }
        }

        GUI.DrawTexture(canvasRect, texture, ScaleMode.ScaleToFit, true);
        //EditorGUI.DrawPreviewTexture(canvasRect,texture);



        if (isDragging || isSizeInvalid)
        {
            GUI.color = color;
        }
    }
Exemple #9
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();
        }
    }