Beispiel #1
0
        void Awake()
        {
            m_Instance = this;

            //create and position all our text lines
            m_NumLines  = Mathf.Max(m_NumLines, 1);
            m_InfoLines = new InfoLine[m_NumLines];
            for (int i = 0; i < m_InfoLines.Length; ++i)
            {
                m_InfoLines[i] = new InfoLine();

                GameObject rLine = (GameObject)Instantiate(m_InfoLinePrefab);
                rLine.transform.parent    = m_RenderablesParent;
                m_InfoLines[i].m_Line     = rLine;
                m_InfoLines[i].m_TextMesh = rLine.GetComponent <TextMesh>();
                m_InfoLines[i].m_Renderer = rLine.GetComponent <Renderer>();

                Vector3 vLocalPos = m_BaseLineLocalPositionOffset;
                vLocalPos.y += m_LineSpacing * (float)i;
                rLine.transform.localPosition = vLocalPos;
                rLine.transform.localRotation = Quaternion.identity;
            }

            m_LineOperateIndex = m_InfoLines.Length - 1;
            m_MeshRenderers    = m_RenderablesParent.GetComponentsInChildren <Renderer>();

            UpdateBackgroundWidth();

            SetState(State.Disabled);

            InputManager.OnSwapControllers += AttachToBrush;

#if (UNITY_EDITOR || EXPERIMENTAL_ENABLED)
            if (Config.IsExperimental)
            {
                m_AutosaveIcon.gameObject.SetActive(true);
            }
#endif
        }
Beispiel #2
0
        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);
            }
        }