void Awake() { m_Instance = this; m_TextMesh = GetComponent <TextMesh>(); m_TextRenderer = GetComponent <Renderer>(); m_StringSizeMap = new Dictionary <TextParams, Vector2>(); }
// maxWidth is in meters static void SetTextResize(string text, TextMesh dest, float maxWidth) { maxWidth = maxWidth * App.METERS_TO_UNITS; dest.text = text; float fTextWidth = TextMeasureScript.GetTextWidth(dest); float ratio = Mathf.Min(1, maxWidth / fTextWidth); dest.transform.localScale = Vector3.one * ratio; }
override protected void Awake() { base.Awake(); m_CurrentScale = m_ScaleRange.x; m_BaseScale = m_Mesh.localScale; if (m_DismissMessage) { TextMesh mesh = m_DismissMessage.GetComponentInChildren <TextMesh>(); m_DismissTextSize.x = TextMeasureScript.GetTextWidth(mesh); m_DismissTextSize.y = TextMeasureScript.GetTextHeight(mesh); } m_TransitionScale = 0.0f; m_AspectRatio = 1.0f; UpdateScale(); }
private void AddNewLineImpl(string sText, bool bNotify = false) { string remainingText = ""; //scoot all the lines around for (int i = 0; i < m_InfoLines.Length; ++i) { Vector3 vLocalPos = m_InfoLines[i].m_Line.transform.localPosition; vLocalPos.y += m_LineSpacing; m_InfoLines[i].m_Line.transform.localPosition = vLocalPos; } //set the new line's text InfoLine operateLine = m_InfoLines[m_LineOperateIndex]; operateLine.m_Line.transform.localPosition = m_BaseLineLocalPositionOffset; operateLine.m_TextMesh.text = sText; operateLine.m_Renderer.material.color = bNotify ? m_NotificationTextColor : m_StandardTextColor; operateLine.m_LineWidth = TextMeasureScript.GetTextWidth(operateLine.m_TextMesh); // Split long lines - cheap and nasty, as it assumes that all characters in a string are the // same length, but as the console widens to accommodate its lines anyway, I don't think it // matters. if (operateLine.m_LineWidth > m_MaxLineWidth) { float portion = m_MaxLineWidth / operateLine.m_LineWidth; int splitPoint = Mathf.FloorToInt(sText.Length * portion); // Look back a few characters to see if there's a better character to split on for (int i = 0; (i > -kSplitSearchMagnitude) && ((i + splitPoint) > 0); i--) { if (!System.Char.IsLetter(sText[i + splitPoint])) { splitPoint += i; break; } } remainingText = sText.Substring(splitPoint).TrimStart(); operateLine.m_TextMesh.text = sText.Substring(0, splitPoint); operateLine.m_LineWidth = TextMeasureScript.GetTextWidth(operateLine.m_TextMesh); } //update our operating index --m_LineOperateIndex; if (m_LineOperateIndex < 0) { m_LineOperateIndex += m_InfoLines.Length; } UpdateBackgroundWidth(); //reset our timer if (bNotify) { m_NotificationDisplayTimer = m_NotificationDisplayDuration; m_Notification.Play(); } if (remainingText.Length > 0) { // TODO: remove the tail-recursion AddNewLineImpl(remainingText, false); } }