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_FontAsset_CreationMenu.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_FontAsset_CreationMenu.cs')
| -rw-r--r-- | Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs new file mode 100644 index 0000000..dca6d14 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs @@ -0,0 +1,190 @@ +using UnityEngine;
+using UnityEditor;
+using System.Linq;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.TextCore;
+using UnityEngine.TextCore.LowLevel;
+using TMPro;
+
+
+namespace TMPro
+{
+ public static class TMP_FontAsset_CreationMenu
+ {
+ /*
+ [MenuItem("Assets/Create/TextMeshPro/Font Asset Fallback", false, 105)]
+ public static void CreateFallbackFontAsset()
+ {
+ Object target = Selection.activeObject;
+
+ // Make sure the selection is a font file
+ if (target == null || target.GetType() != typeof(TMP_FontAsset))
+ {
+ Debug.LogWarning("A Font file must first be selected in order to create a Font Asset.");
+ return;
+ }
+
+ TMP_FontAsset sourceFontAsset = (TMP_FontAsset)target;
+
+ string sourceFontFilePath = AssetDatabase.GetAssetPath(target);
+
+ string folderPath = Path.GetDirectoryName(sourceFontFilePath);
+ string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath);
+
+ string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Fallback.asset");
+
+ //// Create new TM Font Asset.
+ TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
+ AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName);
+
+ fontAsset.version = "1.1.0";
+
+ fontAsset.faceInfo = sourceFontAsset.faceInfo;
+
+ fontAsset.m_SourceFontFileGUID = sourceFontAsset.m_SourceFontFileGUID;
+ fontAsset.m_SourceFontFile_EditorRef = sourceFontAsset.m_SourceFontFile_EditorRef;
+ fontAsset.atlasPopulationMode = TMP_FontAsset.AtlasPopulationMode.Dynamic;
+
+ int atlasWidth = fontAsset.atlasWidth = sourceFontAsset.atlasWidth;
+ int atlasHeight = fontAsset.atlasHeight = sourceFontAsset.atlasHeight;
+ int atlasPadding = fontAsset.atlasPadding = sourceFontAsset.atlasPadding;
+ fontAsset.atlasRenderMode = sourceFontAsset.atlasRenderMode;
+
+ // Initialize array for the font atlas textures.
+ fontAsset.atlasTextures = new Texture2D[1];
+
+ // Create and add font atlas texture
+ Texture2D texture = new Texture2D(atlasWidth, atlasHeight, TextureFormat.Alpha8, false);
+ Color32[] colors = new Color32[atlasWidth * atlasHeight];
+ texture.SetPixels32(colors);
+
+ texture.name = assetName + " Atlas";
+ fontAsset.atlasTextures[0] = texture;
+ AssetDatabase.AddObjectToAsset(texture, fontAsset);
+
+ // Add free rectangle of the size of the texture.
+ int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+ fontAsset.m_FreeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) };
+ fontAsset.m_UsedGlyphRects = new List<GlyphRect>();
+
+ // Create new Material and Add it as Sub-Asset
+ Material tmp_material = new Material(sourceFontAsset.material);
+
+ tmp_material.name = texture.name + " Material";
+ tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+ tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+ tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+ tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
+
+ tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+ tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+ fontAsset.material = tmp_material;
+
+ AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+ // Add Font Asset Creation Settings
+ // TODO
+
+ // Not sure if this is still necessary in newer versions of Unity.
+ EditorUtility.SetDirty(fontAsset);
+
+ AssetDatabase.SaveAssets();
+ }
+ */
+
+ //[MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", true)]
+ //public static bool CreateFontAssetMenuValidation()
+ //{
+ // return false;
+ //}
+
+ [MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", false, 100)]
+ public static void CreateFontAsset()
+ {
+ Object target = Selection.activeObject;
+
+ // Make sure the selection is a font file
+ if (target == null || target.GetType() != typeof(Font))
+ {
+ Debug.LogWarning("A Font file must first be selected in order to create a Font Asset.");
+ return;
+ }
+
+ Font sourceFont = (Font)target;
+
+ string sourceFontFilePath = AssetDatabase.GetAssetPath(target);
+
+ string folderPath = Path.GetDirectoryName(sourceFontFilePath);
+ string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath);
+
+ string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " SDF.asset");
+
+ //// Create new TM Font Asset.
+ TMP_FontAsset fontAsset = ScriptableObject.CreateInstance<TMP_FontAsset>();
+ AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName);
+
+ fontAsset.version = "1.1.0";
+
+ // Set face information
+ FontEngine.InitializeFontEngine();
+ FontEngine.LoadFontFace(sourceFont, 90);
+ fontAsset.faceInfo = FontEngine.GetFaceInfo();
+
+ // Set font reference and GUID
+ fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(sourceFontFilePath);
+ fontAsset.m_SourceFontFile_EditorRef = sourceFont;
+ fontAsset.atlasPopulationMode = AtlasPopulationMode.Dynamic;
+
+ // Default atlas resolution is 1024 x 1024.
+ int atlasWidth = fontAsset.atlasWidth = 1024;
+ int atlasHeight = fontAsset.atlasHeight = 1024;
+ int atlasPadding = fontAsset.atlasPadding = 9;
+ fontAsset.atlasRenderMode = GlyphRenderMode.SDFAA;
+
+ // Initialize array for the font atlas textures.
+ fontAsset.atlasTextures = new Texture2D[1];
+
+ // Create atlas texture of size zero.
+ Texture2D texture = new Texture2D(0, 0, TextureFormat.Alpha8, false);
+
+ texture.name = assetName + " Atlas";
+ fontAsset.atlasTextures[0] = texture;
+ AssetDatabase.AddObjectToAsset(texture, fontAsset);
+
+ // Add free rectangle of the size of the texture.
+ int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1;
+ fontAsset.freeGlyphRects = new List<GlyphRect>() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) };
+ fontAsset.usedGlyphRects = new List<GlyphRect>();
+
+ // Create new Material and Add it as Sub-Asset
+ Shader default_Shader = Shader.Find("TextMeshPro/Distance Field");
+ Material tmp_material = new Material(default_Shader);
+
+ tmp_material.name = texture.name + " Material";
+ tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture);
+ tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth);
+ tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight);
+
+ tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier);
+
+ tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle);
+ tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle);
+
+ fontAsset.material = tmp_material;
+
+ AssetDatabase.AddObjectToAsset(tmp_material, fontAsset);
+
+ // Add Font Asset Creation Settings
+ fontAsset.creationSettings = new FontAssetCreationSettings(fontAsset.m_SourceFontFileGUID, fontAsset.faceInfo.pointSize, 0, atlasPadding, 0, 1024, 1024, 7, string.Empty, (int)GlyphRenderMode.SDFAA);
+
+ // Not sure if this is still necessary in newer versions of Unity.
+ EditorUtility.SetDirty(fontAsset);
+
+ AssetDatabase.SaveAssets();
+ }
+ }
+}
\ No newline at end of file |
