示例#1
0
    void OnGUI()
    {
        List <GameObject> newObjectList = new List <GameObject>();

        bool pack          = false;
        bool reload        = false;
        bool update_sprite = false;

        if (m_AssetList == null)
        {
            m_AssetList = new SpriteAtlasManagerWindow.AtlasListView(this);
            m_AssetList.select_origin_with_pack = true;
            m_AssetList.multiSelectEnable       = true;
            ReloadTreeView();
        }

        /*
         * if (m_ReferenceListView == null) {
         *  m_ReferenceListView = new ReferenceListView();
         *  m_ReferenceListView.refs = single_sprites;
         * }
         */

        if (m_refList == null)
        {
            m_refList = new SpriteAtlasManagerWindow.ReferenceListView();
            m_refList.Reload();
        }

        GUILayout.BeginVertical();
        {
            GUILayout.BeginHorizontal();
            {
                targetTexture = (Texture2D)EditorGUILayout.ObjectField(targetTexture, typeof(Texture2D), false);


                if (GUILayout.Button("Reload"))
                {
                    reload = true;
                }

                if (GUILayout.Button("Update Atlas"))
                {
                    pack = true;
                }


                if (GUILayout.Button("Update Sprite"))
                {
                    update_sprite = true;
                }

                if (GUILayout.Toggle(__debug, "debug") != __debug)
                {
                    __debug = !__debug;
                    Reload();
                }
            }
            GUILayout.EndHorizontal();

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            {
                GUILayout.BeginVertical();
                for (int i = 0; i < targetGameObjects.Count; i++)
                {
                    newObjectList.Add((GameObject)EditorGUILayout.ObjectField(targetGameObjects[i], typeof(GameObject), true));
                }

                GameObject obj = (GameObject)EditorGUILayout.ObjectField(null, typeof(GameObject), true);
                if (obj != null)
                {
                    newObjectList.Add(obj);
                }

                GUILayout.EndVertical();

                GUILayout.Space(position.width - 120);
            }
            GUILayout.EndHorizontal();
        }
        GUILayout.EndVertical();


        Rect r = new Rect(
            150, 40,
            (position.width - 150) / 2, (position.height - 40));

        m_AssetList.OnGUI(r);

        /*
         * Rect s = r;
         * s.y = s.yMax;
         * m_ReferenceListView.OnGUI(s);
         * r.height = position.height - 40;
         */

        r.x = r.xMax + 10;

        m_refList.OnGUI(r);

        bool changed = false;

        for (int i = 0; i < newObjectList.Count; i++)
        {
            if (i < targetGameObjects.Count)
            {
                if (newObjectList[i] != targetGameObjects[i])
                {
                    if (newObjectList[i] != null)
                    {
                        if (!targetGameObjects.Contains(newObjectList[i]))
                        {
                            ScanGameObject(newObjectList[i]);
                        }
                    }
                    changed = true;
                }
                targetGameObjects[i] = newObjectList[i];
            }
            else if (newObjectList[i] != null)
            {
                targetGameObjects.Add(newObjectList[i]);
                ScanGameObject(newObjectList[i]);
                changed = true;
            }
        }

        if (changed)
        {
            ReloadTreeView();
        }
        else if (pack)
        {
            List <SpriteAtlasData>            data = m_AssetList.GetSpriteAtlasDatasList();
            List <SpriteAtlasData.SpriteInfo> list = new List <SpriteAtlasData.SpriteInfo>();
            foreach (var d in data)
            {
                list.AddRange(d.sprites);
            }

            Pack(list.ToArray(), targetTexture);
        }
        else if (reload)
        {
            Reload();
        }

        if (update_sprite)
        {
            List <SpriteAtlasData> data = m_AssetList.GetSpriteAtlasDatasList();
            foreach (GameObject o in targetGameObjects)
            {
                if (o != null)
                {
                    foreach (SpriteAtlasData d in data)
                    {
                        foreach (SpriteAtlasData.SpriteInfo info in d.sprites)
                        {
                            if (info.packed != null && info.origin != null && info.origin != info.packed)
                            {
                                SpriteReferenceInfo.ScanGameObject(o, (c, p) => SpriteReferenceInfo.ReplaceSprite(c, info.origin, info.packed));
                            }
                        }
                    }
                    EditorUtility.SetDirty(o);
                }
            }
            Reload();
        }
    }
示例#2
0
        protected override void KeyEvent()
        {
            base.KeyEvent();
            if (GUIUtility.keyboardControl != treeViewControlID)
            {
                return;
            }

            if (Event.current.type != EventType.KeyDown)
            {
                return;
            }

            if (GetSelection().Count <= 0)
            {
                return;
            }

            SpriteAtlasData atlas = null;

            SpriteAtlasData.SpriteInfo sprite = null;
            Sprite origin = null;

            if (!GetSelectAtlas(out atlas, out sprite, out origin))
            {
                return;
            }

            if (Event.current.keyCode == KeyCode.Space)
            {
                if (sprite != null && origin == null)
                {
                    if (sprite.delete || _refInfo.GetRefCount(sprite.packed) == 0)
                    {
                        sprite.delete = !sprite.delete;
                        Repaint();
                    }
                }
            }

            if (Event.current.keyCode == KeyCode.Delete || Event.current.keyCode == KeyCode.Backspace)
            {
                if (origin != null)
                {
                    if (origin.name != sprite.name)
                    {
                        sprite.RemoveOrigin(origin);
                        Reload();
                    }
                }
                else if (sprite != null)
                {
                    if (Event.current.control && sprite.packed == null && sprite.delete)
                    {
                        atlas.RemoveSprite(sprite);
                        Reload();
                    }
                    else
                    {
                        sprite.delete = true;
                        Repaint();
                    }
                }
                else if (atlas)
                {
                    // _manager.RemoveAtlas(atlas, true);
                    // Reload();
                }
            }

            int use = 0;

            if (Event.current.keyCode == KeyCode.F5)
            {
                use = 1;
            }
            else if (Event.current.keyCode == KeyCode.F6)
            {
                use = 2;
            }

            if (use != 0 && origin != null && origin == sprite.origin)
            {
                Sprite from = (use == 1) ? origin : sprite.packed;
                Sprite to   = (use == 1) ? sprite.packed : origin;
                if (from == null || to == null || from == to)
                {
                    return;
                }

                List <GameObject> objInfo = _delegate.GetReserenceObjects(from);

                if (objInfo.Count > 0)
                {
                    List <GameObject> objs = new List <GameObject>();
                    try {
                        for (int i = 0; i < objInfo.Count; i++)
                        {
                            var obj = objInfo[i];
                            EditorUtility.DisplayProgressBar("replace", AssetDatabase.GetAssetPath(obj), i / objInfo.Count);

                            if (obj != null && obj.GetType() == typeof(GameObject))
                            {
                                GameObject go = obj as GameObject;
                                SpriteReferenceInfo.ScanGameObject(go, (c, p) => {
                                    SpriteReferenceInfo.ReplaceSprite(c, from, to);
                                });
                                EditorUtility.SetDirty(go);
                                objs.Add(go);
                            }
                        }

                        foreach (GameObject go in objs)
                        {
                            SpriteReferenceInfo.Instance.Reload(go);
                        }
                    } catch (System.Exception e) {
                        Debug.LogError(e);
                    } finally {
                        EditorUtility.ClearProgressBar();
                    }
                    Reload();
                }
            }
        }