public static int SpriteSelectorPopup(string label, int spriteId, tk2dSpriteCollectionData spriteCollection) { int newSpriteId = spriteId; // cope with guid not existing if (spriteCollection.guid == null || spriteCollection.guid.Length == 0) { spriteCollection.guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(spriteCollection)); } SpriteCollectionLUT lut = null; spriteSelectorLUT.TryGetValue(spriteCollection.guid, out lut); if (lut == null) { lut = new SpriteCollectionLUT(); lut.buildKey = spriteCollection.buildKey - 1; // force mismatch spriteSelectorLUT[spriteCollection.guid] = lut; } if (lut.buildKey != spriteCollection.buildKey) { var spriteDefs = spriteCollection.spriteDefinitions; string[] spriteNames = new string[spriteDefs.Length]; int[] spriteLookupIndices = new int[spriteNames.Length]; for (int i = 0; i < spriteDefs.Length; ++i) { spriteNames[i] = spriteDefs[i].name; spriteLookupIndices[i] = i; } System.Array.Sort(spriteLookupIndices, (int a, int b) => tk2dEditorUtility.NameCompare((spriteDefs[a] != null)?spriteDefs[a].name:"", (spriteDefs[b] != null)?spriteDefs[b].name:"")); lut.sortedSpriteNames = new string[spriteNames.Length]; lut.sortedListToSpriteId = new int[spriteNames.Length]; lut.spriteIdToSortedList = new int[spriteNames.Length]; for (int i = 0; i < spriteLookupIndices.Length; ++i) { lut.spriteIdToSortedList[spriteLookupIndices[i]] = i; lut.sortedListToSpriteId[i] = spriteLookupIndices[i]; lut.sortedSpriteNames[i] = spriteNames[spriteLookupIndices[i]]; } lut.buildKey = spriteCollection.buildKey; } int spriteLocalIndex = lut.spriteIdToSortedList[spriteId]; int newSpriteLocalIndex = (label == null)?EditorGUILayout.Popup(spriteLocalIndex, lut.sortedSpriteNames):EditorGUILayout.Popup(label, spriteLocalIndex, lut.sortedSpriteNames); if (newSpriteLocalIndex != spriteLocalIndex) { newSpriteId = lut.sortedListToSpriteId[newSpriteLocalIndex]; } return(newSpriteId); }
static int SpriteList(string label, int spriteId, tk2dSpriteCollectionData rootSpriteCollection) { tk2dSpriteCollectionData spriteCollection = rootSpriteCollection.inst; int newSpriteId = spriteId; // cope with guid not existing if (spriteCollection.dataGuid == null || spriteCollection.dataGuid.Length == 0) { spriteCollection.dataGuid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(spriteCollection)); } SpriteCollectionLUT lut = null; spriteSelectorLUT.TryGetValue(spriteCollection.dataGuid, out lut); if (lut == null) { lut = new SpriteCollectionLUT(); lut.buildKey = spriteCollection.buildKey - 1; // force mismatch spriteSelectorLUT[spriteCollection.dataGuid] = lut; } if (lut.buildKey != spriteCollection.buildKey) { var spriteDefs = spriteCollection.spriteDefinitions; string[] spriteNames = new string[spriteDefs.Length]; int[] spriteLookupIndices = new int[spriteNames.Length]; for (int i = 0; i < spriteDefs.Length; ++i) { if (spriteDefs[i].name != null && spriteDefs[i].name.Length > 0) { if (tk2dPreferences.inst.showIds) { spriteNames[i] = spriteDefs[i].name + "\t[" + i.ToString() + "]"; } else { spriteNames[i] = spriteDefs[i].name; } spriteLookupIndices[i] = i; } } System.Array.Sort(spriteLookupIndices, (int a, int b) => tk2dSpriteGuiUtility.NameCompare((spriteDefs[a] != null)?spriteDefs[a].name:"", (spriteDefs[b] != null)?spriteDefs[b].name:"")); lut.sortedSpriteNames = new string[spriteNames.Length]; lut.sortedListToSpriteId = new int[spriteNames.Length]; lut.spriteIdToSortedList = new int[spriteNames.Length]; for (int i = 0; i < spriteLookupIndices.Length; ++i) { lut.spriteIdToSortedList[spriteLookupIndices[i]] = i; lut.sortedListToSpriteId[i] = spriteLookupIndices[i]; lut.sortedSpriteNames[i] = spriteNames[spriteLookupIndices[i]]; } lut.buildKey = spriteCollection.buildKey; } GUILayout.BeginHorizontal(); if (spriteId >= 0 && spriteId < lut.spriteIdToSortedList.Length) { int spriteLocalIndex = lut.spriteIdToSortedList[spriteId]; int newSpriteLocalIndex = (label == null)?EditorGUILayout.Popup(spriteLocalIndex, lut.sortedSpriteNames):EditorGUILayout.Popup(label, spriteLocalIndex, lut.sortedSpriteNames); if (newSpriteLocalIndex != spriteLocalIndex) { newSpriteId = lut.sortedListToSpriteId[newSpriteLocalIndex]; } } GUILayout.EndHorizontal(); return(newSpriteId); }
public static int SpriteSelectorPopup(string label, int spriteId, tk2dSpriteCollectionData spriteCollection) { spriteCollection = spriteCollection.inst; int newSpriteId = spriteId; // cope with guid not existing if (spriteCollection.dataGuid == null || spriteCollection.dataGuid.Length == 0) { spriteCollection.dataGuid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(spriteCollection)); } SpriteCollectionLUT lut = null; spriteSelectorLUT.TryGetValue(spriteCollection.dataGuid, out lut); if (lut == null) { lut = new SpriteCollectionLUT(); lut.buildKey = spriteCollection.buildKey - 1; // force mismatch spriteSelectorLUT[spriteCollection.dataGuid] = lut; } if (lut.buildKey != spriteCollection.buildKey) { var spriteDefs = spriteCollection.spriteDefinitions; string[] spriteNames = new string[spriteDefs.Length]; int[] spriteLookupIndices = new int[spriteNames.Length]; for (int i = 0; i < spriteDefs.Length; ++i) { if (tk2dPreferences.inst.showIds && spriteDefs[i].name != null && spriteDefs[i].name.Length > 0) spriteNames[i] = spriteDefs[i].name + "\t[" + i.ToString() + "]"; else spriteNames[i] = spriteDefs[i].name; spriteLookupIndices[i] = i; } System.Array.Sort(spriteLookupIndices, (int a, int b) => tk2dSpriteGuiUtility.NameCompare((spriteDefs[a]!=null)?spriteDefs[a].name:"", (spriteDefs[b]!=null)?spriteDefs[b].name:"")); lut.sortedSpriteNames = new string[spriteNames.Length]; lut.sortedListToSpriteId = new int[spriteNames.Length]; lut.spriteIdToSortedList = new int[spriteNames.Length]; for (int i = 0; i < spriteLookupIndices.Length; ++i) { lut.spriteIdToSortedList[spriteLookupIndices[i]] = i; lut.sortedListToSpriteId[i] = spriteLookupIndices[i]; lut.sortedSpriteNames[i] = spriteNames[spriteLookupIndices[i]]; } lut.buildKey = spriteCollection.buildKey; } int spriteLocalIndex = lut.spriteIdToSortedList[spriteId]; int newSpriteLocalIndex = (label == null)?EditorGUILayout.Popup(spriteLocalIndex, lut.sortedSpriteNames):EditorGUILayout.Popup(label, spriteLocalIndex, lut.sortedSpriteNames); if (newSpriteLocalIndex != spriteLocalIndex) { newSpriteId = lut.sortedListToSpriteId[newSpriteLocalIndex]; } return newSpriteId; }