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);
    }
예제 #2
0
    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);
    }
예제 #3
0
    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;
    }