From c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 19 Apr 2020 17:19:32 -0400 Subject: Inital commit --- .../Scripts/Runtime/TMP_TextInfo.cs | 256 +++++++++++++++++++++ 1 file changed, 256 insertions(+) create mode 100644 Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs (limited to 'Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs') diff --git a/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs new file mode 100644 index 0000000..ce78220 --- /dev/null +++ b/Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_TextInfo.cs @@ -0,0 +1,256 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro +{ + /// + /// Class which contains information about every element contained within the text object. + /// + [Serializable] + public class TMP_TextInfo + { + private static Vector2 k_InfinityVectorPositive = new Vector2(32767, 32767); + private static Vector2 k_InfinityVectorNegative = new Vector2(-32767, -32767); + + public TMP_Text textComponent; + + public int characterCount; + public int spriteCount; + public int spaceCount; + public int wordCount; + public int linkCount; + public int lineCount; + public int pageCount; + + public int materialCount; + + public TMP_CharacterInfo[] characterInfo; + public TMP_WordInfo[] wordInfo; + public TMP_LinkInfo[] linkInfo; + public TMP_LineInfo[] lineInfo; + public TMP_PageInfo[] pageInfo; + public TMP_MeshInfo[] meshInfo; + + private TMP_MeshInfo[] m_CachedMeshInfo; + + // Default Constructor + public TMP_TextInfo() + { + characterInfo = new TMP_CharacterInfo[8]; + wordInfo = new TMP_WordInfo[16]; + linkInfo = new TMP_LinkInfo[0]; + lineInfo = new TMP_LineInfo[2]; + pageInfo = new TMP_PageInfo[4]; + + meshInfo = new TMP_MeshInfo[1]; + } + + + public TMP_TextInfo(TMP_Text textComponent) + { + this.textComponent = textComponent; + + characterInfo = new TMP_CharacterInfo[8]; + + wordInfo = new TMP_WordInfo[4]; + linkInfo = new TMP_LinkInfo[0]; + + lineInfo = new TMP_LineInfo[2]; + pageInfo = new TMP_PageInfo[4]; + + meshInfo = new TMP_MeshInfo[1]; + meshInfo[0].mesh = textComponent.mesh; + materialCount = 1; + } + + + /// + /// Function to clear the counters of the text object. + /// + public void Clear() + { + characterCount = 0; + spaceCount = 0; + wordCount = 0; + linkCount = 0; + lineCount = 0; + pageCount = 0; + spriteCount = 0; + + for (int i = 0; i < this.meshInfo.Length; i++) + { + this.meshInfo[i].vertexCount = 0; + } + } + + + /// + /// Function to clear the content of the MeshInfo array while preserving the Triangles, Normals and Tangents. + /// + public void ClearMeshInfo(bool updateMesh) + { + for (int i = 0; i < this.meshInfo.Length; i++) + this.meshInfo[i].Clear(updateMesh); + } + + + /// + /// Function to clear the content of all the MeshInfo arrays while preserving their Triangles, Normals and Tangents. + /// + public void ClearAllMeshInfo() + { + for (int i = 0; i < this.meshInfo.Length; i++) + this.meshInfo[i].Clear(true); + } + + + /// + /// + /// + public void ResetVertexLayout(bool isVolumetric) + { + for (int i = 0; i < this.meshInfo.Length; i++) + this.meshInfo[i].ResizeMeshInfo(0, isVolumetric); + } + + + /// + /// Function used to mark unused vertices as degenerate. + /// + /// + public void ClearUnusedVertices(MaterialReference[] materials) + { + for (int i = 0; i < meshInfo.Length; i++) + { + int start = 0; // materials[i].referenceCount * 4; + meshInfo[i].ClearUnusedVertices(start); + } + } + + + /// + /// Function to clear and initialize the lineInfo array. + /// + public void ClearLineInfo() + { + if (this.lineInfo == null) + this.lineInfo = new TMP_LineInfo[2]; + + for (int i = 0; i < this.lineInfo.Length; i++) + { + this.lineInfo[i].characterCount = 0; + this.lineInfo[i].spaceCount = 0; + this.lineInfo[i].wordCount = 0; + this.lineInfo[i].controlCharacterCount = 0; + this.lineInfo[i].width = 0; + + this.lineInfo[i].ascender = k_InfinityVectorNegative.x; + this.lineInfo[i].descender = k_InfinityVectorPositive.x; + + this.lineInfo[i].lineExtents.min = k_InfinityVectorPositive; + this.lineInfo[i].lineExtents.max = k_InfinityVectorNegative; + + this.lineInfo[i].maxAdvance = 0; + //this.lineInfo[i].maxScale = 0; + + } + } + + + /// + /// Function to copy the MeshInfo Arrays and their primary vertex data content. + /// + /// A copy of the MeshInfo[] + public TMP_MeshInfo[] CopyMeshInfoVertexData() + { + if (m_CachedMeshInfo == null || m_CachedMeshInfo.Length != meshInfo.Length) + { + m_CachedMeshInfo = new TMP_MeshInfo[meshInfo.Length]; + + // Initialize all the vertex data arrays + for (int i = 0; i < m_CachedMeshInfo.Length; i++) + { + int length = meshInfo[i].vertices.Length; + + m_CachedMeshInfo[i].vertices = new Vector3[length]; + m_CachedMeshInfo[i].uvs0 = new Vector2[length]; + m_CachedMeshInfo[i].uvs2 = new Vector2[length]; + m_CachedMeshInfo[i].colors32 = new Color32[length]; + + //m_CachedMeshInfo[i].normals = new Vector3[length]; + //m_CachedMeshInfo[i].tangents = new Vector4[length]; + //m_CachedMeshInfo[i].triangles = new int[meshInfo[i].triangles.Length]; + } + } + + for (int i = 0; i < m_CachedMeshInfo.Length; i++) + { + int length = meshInfo[i].vertices.Length; + + if (m_CachedMeshInfo[i].vertices.Length != length) + { + m_CachedMeshInfo[i].vertices = new Vector3[length]; + m_CachedMeshInfo[i].uvs0 = new Vector2[length]; + m_CachedMeshInfo[i].uvs2 = new Vector2[length]; + m_CachedMeshInfo[i].colors32 = new Color32[length]; + + //m_CachedMeshInfo[i].normals = new Vector3[length]; + //m_CachedMeshInfo[i].tangents = new Vector4[length]; + //m_CachedMeshInfo[i].triangles = new int[meshInfo[i].triangles.Length]; + } + + + // Only copy the primary vertex data + Array.Copy(meshInfo[i].vertices, m_CachedMeshInfo[i].vertices, length); + Array.Copy(meshInfo[i].uvs0, m_CachedMeshInfo[i].uvs0, length); + Array.Copy(meshInfo[i].uvs2, m_CachedMeshInfo[i].uvs2, length); + Array.Copy(meshInfo[i].colors32, m_CachedMeshInfo[i].colors32, length); + + //Array.Copy(meshInfo[i].normals, m_CachedMeshInfo[i].normals, length); + //Array.Copy(meshInfo[i].tangents, m_CachedMeshInfo[i].tangents, length); + //Array.Copy(meshInfo[i].triangles, m_CachedMeshInfo[i].triangles, meshInfo[i].triangles.Length); + } + + return m_CachedMeshInfo; + } + + + + /// + /// Function to resize any of the structure contained in the TMP_TextInfo class. + /// + /// + /// + /// + public static void Resize (ref T[] array, int size) + { + // Allocated to the next power of two + int newSize = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size); + + Array.Resize(ref array, newSize); + } + + + /// + /// Function to resize any of the structure contained in the TMP_TextInfo class. + /// + /// + /// + /// + /// + public static void Resize(ref T[] array, int size, bool isBlockAllocated) + { + //if (size <= array.Length) return; + + if (isBlockAllocated) size = size > 1024 ? size + 256 : Mathf.NextPowerOfTwo(size); + + if (size == array.Length) return; + + Array.Resize(ref array, size); + } + + } +} -- cgit v1.2.3