示例#1
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();
                }
            }
        }