diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2020-04-19 17:19:32 -0400 |
| commit | c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch) | |
| tree | ee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs | |
| download | Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2 Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip | |
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs new file mode 100644 index 0000000..a4b0739 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_SpriteAssetImporter.cs @@ -0,0 +1,232 @@ +using UnityEngine;
+using UnityEditor;
+using System.IO;
+using System.Collections.Generic;
+using TMPro.EditorUtilities;
+using TMPro.SpriteAssetUtilities;
+
+namespace TMPro
+{
+ public class TMP_SpriteAssetImporter : EditorWindow
+ {
+ // Create Sprite Asset Editor Window
+ [MenuItem("Window/TextMeshPro/Sprite Importer", false, 2026)]
+ public static void ShowFontAtlasCreatorWindow()
+ {
+ var window = GetWindow<TMP_SpriteAssetImporter>();
+ window.titleContent = new GUIContent("Sprite Importer");
+ window.Focus();
+ }
+
+ Texture2D m_SpriteAtlas;
+ SpriteAssetImportFormats m_SpriteDataFormat = SpriteAssetImportFormats.TexturePacker;
+ TextAsset m_JsonFile;
+
+ string m_CreationFeedback;
+
+ TMP_SpriteAsset m_SpriteAsset;
+ List<TMP_Sprite> m_SpriteInfoList = new List<TMP_Sprite>();
+
+
+ void OnEnable()
+ {
+ // Set Editor Window Size
+ SetEditorWindowSize();
+ }
+
+ public void OnGUI()
+ {
+ DrawEditorPanel();
+ }
+
+
+ void DrawEditorPanel()
+ {
+ // label
+ GUILayout.Label("Import Settings", EditorStyles.boldLabel);
+
+ EditorGUI.BeginChangeCheck();
+
+ // Sprite Texture Selection
+ m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset;
+
+ m_SpriteDataFormat = (SpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat);
+
+ // Sprite Texture Selection
+ m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D;
+
+ if (EditorGUI.EndChangeCheck())
+ {
+ m_CreationFeedback = string.Empty;
+ }
+
+ GUILayout.Space(10);
+
+ GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker;
+
+ // Create Sprite Asset
+ if (GUILayout.Button("Create Sprite Asset"))
+ {
+ m_CreationFeedback = string.Empty;
+
+ // Read json data file
+ if (m_JsonFile != null && m_SpriteDataFormat == SpriteAssetImportFormats.TexturePacker)
+ {
+ TexturePacker.SpriteDataObject sprites = JsonUtility.FromJson<TexturePacker.SpriteDataObject>(m_JsonFile.text);
+
+ if (sprites != null && sprites.frames != null && sprites.frames.Count > 0)
+ {
+ int spriteCount = sprites.frames.Count;
+
+ // Update import results
+ m_CreationFeedback = "<b>Import Results</b>\n--------------------\n";
+ m_CreationFeedback += "<color=#C0ffff><b>" + spriteCount + "</b></color> Sprites were imported from file.";
+
+ // Create sprite info list
+ m_SpriteInfoList = CreateSpriteInfoList(sprites);
+ }
+ }
+
+ }
+
+ GUI.enabled = true;
+
+ // Creation Feedback
+ GUILayout.Space(5);
+ GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60));
+ {
+ EditorGUILayout.LabelField(m_CreationFeedback, TMP_UIStyleManager.label);
+ }
+ GUILayout.EndVertical();
+
+ GUILayout.Space(5);
+ GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteInfoList.Count > 0; // Enable Save Button if font_Atlas is not Null.
+ if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null)
+ {
+ string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset");
+
+ if (filePath.Length == 0)
+ return;
+
+ SaveSpriteAsset(filePath);
+ }
+ GUI.enabled = true;
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ List<TMP_Sprite> CreateSpriteInfoList(TexturePacker.SpriteDataObject spriteDataObject)
+ {
+ List<TexturePacker.SpriteData> importedSprites = spriteDataObject.frames;
+
+ 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 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 = 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;
+
+ // Properties the can be modified
+ sprite.xAdvance = sprite.width;
+ sprite.scale = 1.0f;
+ sprite.xOffset = 0 - (sprite.width * sprite.pivot.x);
+ sprite.yOffset = sprite.height - (sprite.height * sprite.pivot.y);
+
+ spriteInfoList.Add(sprite);
+ }
+
+ return spriteInfoList;
+ }
+
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="filePath"></param>
+ void SaveSpriteAsset(string filePath)
+ {
+ filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath.
+
+ string dataPath = Application.dataPath;
+
+ if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1)
+ {
+ Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\"");
+ return;
+ }
+
+ string relativeAssetPath = filePath.Substring(dataPath.Length - 6);
+ string dirName = Path.GetDirectoryName(relativeAssetPath);
+ string fileName = Path.GetFileNameWithoutExtension(relativeAssetPath);
+ string pathNoExt = dirName + "/" + fileName;
+
+
+ // Create new Sprite Asset using this texture
+ m_SpriteAsset = CreateInstance<TMP_SpriteAsset>();
+ AssetDatabase.CreateAsset(m_SpriteAsset, pathNoExt + ".asset");
+
+ // Compute the hash code for the sprite asset.
+ m_SpriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(m_SpriteAsset.name);
+
+ // Assign new Sprite Sheet texture to the Sprite Asset.
+ m_SpriteAsset.spriteSheet = m_SpriteAtlas;
+ m_SpriteAsset.spriteInfoList = m_SpriteInfoList;
+
+ // Add new default material for sprite asset.
+ AddDefaultMaterial(m_SpriteAsset);
+ }
+
+
+ /// <summary>
+ /// Create and add new default material to sprite asset.
+ /// </summary>
+ /// <param name="spriteAsset"></param>
+ static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset)
+ {
+ Shader shader = Shader.Find("TextMeshPro/Sprite");
+ Material material = new Material(shader);
+ material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet);
+
+ spriteAsset.material = material;
+ material.hideFlags = HideFlags.HideInHierarchy;
+ AssetDatabase.AddObjectToAsset(material, spriteAsset);
+ }
+
+
+ /// <summary>
+ /// Limits the minimum size of the editor window.
+ /// </summary>
+ void SetEditorWindowSize()
+ {
+ EditorWindow editorWindow = this;
+
+ Vector2 currentWindowSize = editorWindow.minSize;
+
+ editorWindow.minSize = new Vector2(Mathf.Max(230, currentWindowSize.x), Mathf.Max(300, currentWindowSize.y));
+ }
+
+ }
+}
\ No newline at end of file |
