Exemplo n.º 1
0
        private static List <TMP_Sprite> GetSpriteInfo(Texture source)
        {
            string assetPath = AssetDatabase.GetAssetPath(source);

            Sprite[] array = (from x in AssetDatabase.LoadAllAssetsAtPath(assetPath)
                              select x as Sprite into x
                              where x != null
                              orderby x.rect.y descending, x.rect.x
                              select x).ToArray();
            List <TMP_Sprite> list = new List <TMP_Sprite>();

            for (int i = 0; i < array.Length; i++)
            {
                TMP_Sprite tMP_Sprite = new TMP_Sprite();
                Sprite     sprite     = array[i];
                tMP_Sprite.id       = i;
                tMP_Sprite.name     = sprite.name;
                tMP_Sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(tMP_Sprite.name);
                Rect rect = sprite.rect;
                tMP_Sprite.x      = rect.x;
                tMP_Sprite.y      = rect.y;
                tMP_Sprite.width  = rect.width;
                tMP_Sprite.height = rect.height;
                Vector2 vector = new Vector2(0f - sprite.bounds.min.x / (sprite.bounds.extents.x * 2f), 0f - sprite.bounds.min.y / (sprite.bounds.extents.y * 2f));
                tMP_Sprite.pivot    = new Vector2(0f - vector.x * rect.width, rect.height - vector.y * rect.height);
                tMP_Sprite.sprite   = sprite;
                tMP_Sprite.xAdvance = rect.width;
                tMP_Sprite.scale    = 1f;
                tMP_Sprite.xOffset  = tMP_Sprite.pivot.x;
                tMP_Sprite.yOffset  = tMP_Sprite.pivot.y;
                list.Add(tMP_Sprite);
            }
            return(list);
        }
Exemplo n.º 2
0
        private static List <TMP_Sprite> UpdateSpriteInfo(TMP_SpriteAsset spriteAsset)
        {
            string assetPath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet);

            Sprite[] array = (from x in AssetDatabase.LoadAllAssetsAtPath(assetPath)
                              select x as Sprite into x
                              where x != null
                              orderby x.rect.y descending, x.rect.x
                              select x).ToArray();
            for (int i = 0; i < array.Length; i++)
            {
                Sprite sprite = array[i];
                int    num    = -1;
                if (spriteAsset.spriteInfoList.Count > i && spriteAsset.spriteInfoList[i].sprite != null)
                {
                    num = spriteAsset.spriteInfoList.FindIndex((TMP_Sprite item) => item.sprite.GetInstanceID() == sprite.GetInstanceID());
                }
                TMP_Sprite tMP_Sprite = (num == -1) ? new TMP_Sprite() : spriteAsset.spriteInfoList[num];
                Rect       rect       = sprite.rect;
                tMP_Sprite.x      = rect.x;
                tMP_Sprite.y      = rect.y;
                tMP_Sprite.width  = rect.width;
                tMP_Sprite.height = rect.height;
                Vector2 vector = new Vector2(0f - sprite.bounds.min.x / (sprite.bounds.extents.x * 2f), 0f - sprite.bounds.min.y / (sprite.bounds.extents.y * 2f));
                tMP_Sprite.pivot = new Vector2(0f - vector.x * rect.width, rect.height - vector.y * rect.height);
                if (num == -1)
                {
                    int[] array2 = spriteAsset.spriteInfoList.Select((TMP_Sprite item) => item.id).ToArray();
                    int   id     = 0;
                    for (int j = 0; j < array2.Length; j++)
                    {
                        if (array2[0] != 0)
                        {
                            break;
                        }
                        if (j > 0 && array2[j] - array2[j - 1] > 1)
                        {
                            id = array2[j - 1] + 1;
                            break;
                        }
                        id = j + 1;
                    }
                    tMP_Sprite.sprite   = sprite;
                    tMP_Sprite.name     = sprite.name;
                    tMP_Sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(tMP_Sprite.name);
                    tMP_Sprite.id       = id;
                    tMP_Sprite.xAdvance = rect.width;
                    tMP_Sprite.scale    = 1f;
                    tMP_Sprite.xOffset  = tMP_Sprite.pivot.x;
                    tMP_Sprite.yOffset  = tMP_Sprite.pivot.y;
                    spriteAsset.spriteInfoList.Add(tMP_Sprite);
                    spriteAsset.spriteInfoList = spriteAsset.spriteInfoList.OrderBy((TMP_Sprite s) => s.id).ToList();
                }
                else
                {
                    spriteAsset.spriteInfoList[num] = tMP_Sprite;
                }
            }
            return(spriteAsset.spriteInfoList);
        }
Exemplo n.º 3
0
        private static void PushSprite(EmojiTexture emojiTex)
        {
            if (currentEmojiIndex >= SHEET_TILES * SHEET_TILES)
            {
                var newSheet = CreateTMP_SpriteAsset();
                rootEmojiAsset.fallbackSpriteAssets.Add(newSheet);
                currentEmojiAsset = newSheet;
                currentEmojiIndex = 0;
            }

            int row    = currentEmojiIndex % SHEET_TILES;
            int column = currentEmojiIndex / SHEET_TILES;

            if (EmojiTexture.CanCopyTextures)
            {
                Graphics.CopyTexture(emojiTex, 0, 0, 0, 0, EMOJI_SIZE, EMOJI_SIZE,
                                     currentEmojiAsset.spriteSheet, 0, 0, row * EMOJI_SIZE,
                                     (SHEET_SIZE)-((column + 1) * EMOJI_SIZE));
            }
            else
            {
                //If we can't copy on the GPU, we copy on the CPU
                var pixels = ((Texture2D)emojiTex).GetPixels32(0);
                ((Texture2D)currentEmojiAsset.spriteSheet).SetPixels32(
                    row * EMOJI_SIZE, (SHEET_SIZE)-((column + 1) * EMOJI_SIZE), EMOJI_SIZE, EMOJI_SIZE, pixels, 0);

                //Free CPU copy of the texture (mark as non readable) if it's full
                var makeNoLongerReadable = currentEmojiIndex == SHEET_TILES * SHEET_TILES - 1;
                if (makeNoLongerReadable)
                {
                    ((Texture2D)currentEmojiAsset.spriteSheet).Apply(false, makeNoLongerReadable);
                }
                textureNeedsApply = !makeNoLongerReadable;
            }

            TMP_Sprite tmp_Sprite = new TMP_Sprite();

            tmp_Sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(emojiTex.Text);
            tmp_Sprite.height   = EMOJI_SIZE;
            tmp_Sprite.id       = currentEmojiIndex;
            tmp_Sprite.name     = emojiTex.Text;
            tmp_Sprite.pivot    = Vector2.one * 0.5f;
            tmp_Sprite.scale    = 1;
            tmp_Sprite.unicode  = emojiTexture.Unicode;
            tmp_Sprite.width    = EMOJI_SIZE;
            tmp_Sprite.x        = row * EMOJI_SIZE;
            tmp_Sprite.xAdvance = EMOJI_SIZE;
            tmp_Sprite.xOffset  = 0;
            tmp_Sprite.y        = (SHEET_SIZE)-((column + 1) * EMOJI_SIZE);
            tmp_Sprite.yOffset  = EMOJI_SIZE * 0.9f;

            currentEmojiAsset.spriteInfoList.Add(tmp_Sprite);
            currentEmojiAsset.UpdateLookupTables();
            currentEmojiIndex++;
        }
Exemplo n.º 4
0
        private static List <TMP_Sprite> GetSpriteInfo(Texture source)
        {
            //Debug.Log("Creating new Sprite Asset.");

            string filePath = AssetDatabase.GetAssetPath(source);

            // Get all the Sprites sorted by Index
            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();

            List <TMP_Sprite> spriteInfoList = new List <TMP_Sprite>();

            for (int i = 0; i < sprites.Length; i++)
            {
                TMP_Sprite spriteInfo = new TMP_Sprite();
                Sprite     sprite     = sprites[i];

                //spriteInfo.fileID = UnityEditor.Unsupported.GetLocalIdentifierInFile(sprite.GetInstanceID());
                spriteInfo.id       = i;
                spriteInfo.name     = sprite.name;
                spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name);

                Rect spriteRect = sprite.rect;
                spriteInfo.x      = spriteRect.x;
                spriteInfo.y      = spriteRect.y;
                spriteInfo.width  = spriteRect.width;
                spriteInfo.height = spriteRect.height;

                // Compute Sprite pivot position
                Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2));
                spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height);

                spriteInfo.sprite = sprite;

                // Properties the can be modified
                spriteInfo.xAdvance = spriteRect.width;
                spriteInfo.scale    = 1.0f;
                spriteInfo.xOffset  = spriteInfo.pivot.x;
                spriteInfo.yOffset  = spriteInfo.pivot.y;

                spriteInfoList.Add(spriteInfo);
            }

            return(spriteInfoList);
        }
Exemplo n.º 5
0
        // Update existing SpriteInfo
        private static List <TMP_Sprite> UpdateSpriteInfo(TMP_SpriteAsset spriteAsset)
        {
            //Debug.Log("Updating Sprite Asset.");

            string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet);

            // Get all the Sprites sorted Left to Right / Top to Bottom
            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();

            for (int i = 0; i < sprites.Length; i++)
            {
                Sprite sprite = sprites[i];

                // Check if the sprite is already contained in the SpriteInfoList
                int index = -1;
                if (spriteAsset.spriteInfoList.Count > i && spriteAsset.spriteInfoList[i].sprite != null)
                {
                    index = spriteAsset.spriteInfoList.FindIndex(item => item.sprite.GetInstanceID() == sprite.GetInstanceID());
                }

                // Use existing SpriteInfo if it already exists
                TMP_Sprite spriteInfo = index == -1 ? new TMP_Sprite() : spriteAsset.spriteInfoList[index];

                Rect spriteRect = sprite.rect;
                spriteInfo.x      = spriteRect.x;
                spriteInfo.y      = spriteRect.y;
                spriteInfo.width  = spriteRect.width;
                spriteInfo.height = spriteRect.height;

                // Get Sprite Pivot
                Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2));

                // The position of the pivot influences the Offset position.
                spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height);

                if (index == -1)
                {
                    // Find the next available index for this Sprite
                    int[] ids = spriteAsset.spriteInfoList.Select(item => item.id).ToArray();

                    int id = 0;
                    for (int j = 0; j < ids.Length; j++)
                    {
                        if (ids[0] != 0)
                        {
                            break;
                        }

                        if (j > 0 && (ids[j] - ids[j - 1]) > 1)
                        {
                            id = ids[j - 1] + 1;
                            break;
                        }

                        id = j + 1;
                    }

                    spriteInfo.sprite   = sprite;
                    spriteInfo.name     = sprite.name;
                    spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name);
                    spriteInfo.id       = id;
                    spriteInfo.xAdvance = spriteRect.width;
                    spriteInfo.scale    = 1.0f;

                    spriteInfo.xOffset = spriteInfo.pivot.x;
                    spriteInfo.yOffset = spriteInfo.pivot.y;

                    spriteAsset.spriteInfoList.Add(spriteInfo);

                    // Sort the Sprites by ID
                    spriteAsset.spriteInfoList = spriteAsset.spriteInfoList.OrderBy(s => s.id).ToList();
                }
                else
                {
                    spriteAsset.spriteInfoList[index] = spriteInfo;
                }
            }

            return(spriteAsset.spriteInfoList);
        }
        private static List<TMP_Sprite> GetSpriteInfo(Texture source)
        {
            //Debug.Log("Creating new Sprite Asset.");

            string filePath = AssetDatabase.GetAssetPath(source);

            // Get all the Sprites sorted by Index
            Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray();

            List<TMP_Sprite> spriteInfoList = new List<TMP_Sprite>();

            for (int i = 0; i < sprites.Length; i++)
            {
                TMP_Sprite spriteInfo = new TMP_Sprite();
                Sprite sprite = sprites[i];

                //spriteInfo.fileID = UnityEditor.Unsupported.GetLocalIdentifierInFile(sprite.GetInstanceID());
                spriteInfo.id = i;
                spriteInfo.name = sprite.name;
                spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name);

                Rect spriteRect = sprite.rect;
                spriteInfo.x = spriteRect.x;
                spriteInfo.y = spriteRect.y;
                spriteInfo.width = spriteRect.width;
                spriteInfo.height = spriteRect.height;

                // Compute Sprite pivot position
                Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2));
                spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height);

                spriteInfo.sprite = sprite;

                // Properties the can be modified
                spriteInfo.xAdvance = spriteRect.width;
                spriteInfo.scale = 1.0f;
                spriteInfo.xOffset = spriteInfo.pivot.x;
                spriteInfo.yOffset = spriteInfo.pivot.y;

                spriteInfoList.Add(spriteInfo);

            }

            return spriteInfoList;
        }
Exemplo n.º 7
0
        //TODO: Currently this doesn't work on a folder that has no textures in it.
        public void LoadCustomFolderSprite(ICustomFolderInfo folder, string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            var folderIconPath = Path.Combine(path, "folder.png");

            if (!File.Exists(folderIconPath))
            {
                folderIconPath = Path.Combine(path, "folder.jpg");
            }

            if (!File.Exists(folderIconPath))
            {
                folderIconPath = Path.Combine(path, "folder.jpeg");
            }

            if (!File.Exists(folderIconPath))
            {
                return;
            }

            // Assign new Sprite Sheet texture to the Sprite Asset.
            var texture = LoadTexture(folderIconPath);

            List <TMP_Sprite> spriteInfoList = new List <TMP_Sprite>();

            TMP_Sprite sprite = new TMP_Sprite();

            sprite.id       = 0;
            sprite.name     = Path.GetFileNameWithoutExtension(folderIconPath) ?? "";
            sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name);

            //// Attempt to extract Unicode value from name
            int unicode;
            int indexOfSeperator = sprite.name.IndexOf('-');

            if (indexOfSeperator != -1)
            {
                unicode = TMP_TextUtilities.StringHexToInt(sprite.name.Substring(indexOfSeperator + 1));
            }
            else
            {
                unicode = TMP_TextUtilities.StringHexToInt(sprite.name);
            }

            sprite.unicode = unicode;

            sprite.x      = 0;
            sprite.y      = 0;
            sprite.width  = texture.width;
            sprite.height = texture.height;
            sprite.pivot  = new Vector2(0.5f, 0.5f);

            sprite.xAdvance = sprite.width;
            sprite.scale    = 1.0f;
            sprite.xOffset  = 0 - (sprite.width * sprite.pivot.x);
            sprite.yOffset  = sprite.height;

            spriteInfoList.Add(sprite);

            // Create new Sprite Asset using this texture
            TMP_SpriteAsset spriteAsset = ScriptableObject.CreateInstance <TMP_SpriteAsset>();

            // Compute the hash code for the sprite asset.
            spriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteAsset.name);

            spriteAsset.spriteSheet    = texture;
            spriteAsset.spriteInfoList = spriteInfoList;

            // Add new default material for sprite asset.
            AddDefaultMaterial(spriteAsset);

            folder.CustomSprite = spriteAsset;
        }
        List <TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
#endif
        {
#if TMP_2_1_0_PREVIEW_1_OR_NEWER
            List <TexturePacker_JsonArray.Frame> importedSprites = spriteDataObject.frames;
#else
            List <TexturePacker.SpriteData> importedSprites = spriteDataObject.frames;
#endif

            List <TMP_Sprite> spriteInfoList = new List <TMP_Sprite>();

            for (int i = 0; i < importedSprites.Count; i++)
            {
                TMP_Sprite sprite = new TMP_Sprite();

                sprite.id       = i;
                sprite.name     = Path.GetFileNameWithoutExtension(importedSprites[i].filename) ?? "";
                sprite.hashCode = TMP_TextUtilities.GetSimpleHashCode(sprite.name);

                // Attempt to extract Unicode value from name
                int unicode;
                int indexOfSeparator = sprite.name.IndexOf('-');
                if (indexOfSeparator != -1)
                {
                    string substring = sprite.name.Substring(0, indexOfSeparator);
#if TMP_1_4_0_OR_NEWER
                    unicode = TMP_TextUtilities.StringHexToInt(substring);
#else
                    unicode = TMP_TextUtilities.StringToInt(substring);
#endif
                }
                else
                {
#if TMP_1_4_0_OR_NEWER
                    unicode = TMP_TextUtilities.StringHexToInt(sprite.name);
#else
                    unicode = TMP_TextUtilities.StringToInt(sprite.name);
#endif
                }

                sprite.unicode = unicode;

                sprite.x      = importedSprites[i].frame.x;
                sprite.y      = m_SpriteAtlas.height - (importedSprites[i].frame.y + importedSprites[i].frame.h);
                sprite.width  = importedSprites[i].frame.w;
                sprite.height = importedSprites[i].frame.h;

                //Calculate sprite pivot position
                sprite.pivot = importedSprites[i].pivot;

                //Extra Properties
                //var scaledOffset = (sprite.height * ((m_globalGlyphScale - 1) * 0.5f)) * sprite.pivot.y;
                sprite.xAdvance = sprite.width;
#if TMP_1_4_0_OR_NEWER
                sprite.scale = 1.0f;
#else
                sprite.scale = m_globalGlyphScale;
#endif
                sprite.xOffset = 0 - (sprite.width * sprite.pivot.x);
                sprite.yOffset = sprite.height - (sprite.height * sprite.pivot.y);
                spriteInfoList.Add(sprite);
            }

            return(spriteInfoList);
        }