void OpenDialogBox(int _index)
    {
        if (_index == 0)
        {
            HeadBattleGameManager.Instance.SetGameState(1);                                                                     //村长转为说话阶段
        }
        m_dialogLabel.gameObject.SetActive(true);
        Vector3 _screenPos   = Camera.main.WorldToScreenPoint(m_dialogPos.position);                    //世界坐标转为屏幕坐标
        Vector3 _uiScreenPos = UICamera.mainCamera.ScreenToWorldPoint(_screenPos);                      //转为NGUI世界坐标

        _uiScreenPos.z = 0f;                                                                            //NGUI坐标中去掉Z轴
        m_dialogLabel.gameObject.transform.position = _uiScreenPos;                                     //指定对话框位置
        m_dialogLabel.text = " ";                                                                       //置空对话内容
        HeadBattleGameManager.Instance.SetDialogText(m_dialogText [_index]);
        typeWriter = m_dialogLabel.gameObject.GetComponent <HeadBattleTypeWriter>();
        if (typeWriter != null)
        {
            Destroy(typeWriter);
        }
        typeWriter = m_dialogLabel.gameObject.AddComponent <HeadBattleTypeWriter>();                     //添加打印机效果
    }
Пример #2
0
    /// <summary>
    /// Finish the typewriter operation and show all the text right away.
    /// </summary>

    public void Finish()
    {
        if (mActive)
        {
            mActive = false;

            if (!mReset)
            {
                mCurrentOffset = mFullText.Length;
                mFade.Clear();
                mLabel.text = mFullText;
            }

            if (keepFullDimensions && scrollView != null)
            {
                scrollView.UpdatePosition();
            }

            current = this;
            EventDelegate.Execute(onFinished);
            current = null;
        }
    }
Пример #3
0
    void Update()
    {
        if (!mActive)
        {
            return;
        }

        if (mReset)
        {
            mCurrentOffset = 0;
            mReset         = false;
            mLabel         = GetComponent <UILabel>();
            //mFullText = mLabel.processedText;
            mFullText = HeadBattleGameManager.Instance.GetDialogText();
            mFade.Clear();

            if (keepFullDimensions && scrollView != null)
            {
                scrollView.UpdatePosition();
            }
        }

        while (mCurrentOffset < mFullText.Length && mNextChar <= RealTime.time)
        {
            int lastOffset = mCurrentOffset;
            charsPerSecond = Mathf.Max(1, charsPerSecond);

            // Automatically skip all symbols
            while (NGUIText.ParseSymbol(mFullText, ref mCurrentOffset))
            {
            }
            ++mCurrentOffset;

            // Periods and end-of-line characters should pause for a longer time.
            float delay = 1f / charsPerSecond;
            char  c     = (lastOffset < mFullText.Length) ? mFullText[lastOffset] : '\n';

            if (c == '\n')
            {
                delay += delayOnNewLine;
            }
            else if (lastOffset + 1 == mFullText.Length || mFullText[lastOffset + 1] <= ' ')
            {
                if (c == '.')
                {
                    if (lastOffset + 2 < mFullText.Length && mFullText[lastOffset + 1] == '.' && mFullText[lastOffset + 2] == '.')
                    {
                        delay      += delayOnPeriod * 3f;
                        lastOffset += 2;
                    }
                    else
                    {
                        delay += delayOnPeriod;
                    }
                }
                else if (c == '!' || c == '?')
                {
                    delay += delayOnPeriod;
                }
            }

            if (mNextChar == 0f)
            {
                mNextChar = RealTime.time + delay;
            }
            else
            {
                mNextChar += delay;
            }

            if (fadeInTime != 0f)
            {
                // There is smooth fading involved
                FadeEntry fe = new FadeEntry();
                fe.index = lastOffset;
                fe.alpha = 0f;
                fe.text  = mFullText.Substring(lastOffset, mCurrentOffset - lastOffset);
                mFade.Add(fe);
            }
            else
            {
                // No smooth fading necessary
                mLabel.text = keepFullDimensions ?
                              mFullText.Substring(0, mCurrentOffset) + "[00]" + mFullText.Substring(mCurrentOffset) :
                              mFullText.Substring(0, mCurrentOffset);

                // If a scroll view was specified, update its position
                if (!keepFullDimensions && scrollView != null)
                {
                    scrollView.UpdatePosition();
                }
            }
        }

        // Alpha-based fading
        if (mFade.size != 0)
        {
            for (int i = 0; i < mFade.size;)
            {
                FadeEntry fe = mFade[i];
                fe.alpha += RealTime.deltaTime / fadeInTime;

                if (fe.alpha < 1f)
                {
                    mFade[i] = fe;
                    ++i;
                }
                else
                {
                    mFade.RemoveAt(i);
                }
            }

            if (mFade.size == 0)
            {
                if (keepFullDimensions)
                {
                    mLabel.text = mFullText.Substring(0, mCurrentOffset) + "[00]" + mFullText.Substring(mCurrentOffset);
                }
                else
                {
                    mLabel.text = mFullText.Substring(0, mCurrentOffset);
                }
            }
            else
            {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < mFade.size; ++i)
                {
                    FadeEntry fe = mFade[i];

                    if (i == 0)
                    {
                        sb.Append(mFullText.Substring(0, fe.index));
                    }

                    sb.Append('[');
                    sb.Append(NGUIText.EncodeAlpha(fe.alpha));
                    sb.Append(']');
                    sb.Append(fe.text);
                }

                if (keepFullDimensions)
                {
                    sb.Append("[00]");
                    sb.Append(mFullText.Substring(mCurrentOffset));
                }

                mLabel.text = sb.ToString();
            }
        }
        else if (mCurrentOffset == mFullText.Length)
        {
            current = this;
            EventDelegate.Execute(onFinished);
            current = null;
            mActive = false;
            //HeadBattleGameManager.Instance.OpenUsualBtn();
        }
    }