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); }
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); }
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++; }
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); }
// 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; }
//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); }