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(); } }
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(); } } }