Ejemplo n.º 1
0
    void Align()
    {
        int nLineGap = 0;

        // 先让Y轴居中吧
        float fOffsetY = m_fLineOffsetY + m_fCurLineHeight * 0.5f;

        for (int i = m_nStartLineIndex; i < m_nTitleNumb; ++i)
        {
            HUDTilteLine title = m_TitleLine[i];

            HudTitleAttribute titleAttrib = HudSetting.Instance.TitleSets[(int)title.m_nType].GetTitle(title.m_nColorIndex);
            if (titleAttrib.AlignType == HUDAlignType.align_right)
            {
                OffsetXY(title.m_nStart, title.m_nEnd, m_fCurLineWidth * 0.5f + titleAttrib.CharGap, fOffsetY);
            }
            else if (titleAttrib.AlignType == HUDAlignType.align_left)
            {
                OffsetXY(title.m_nStart, title.m_nEnd, -m_fCurLineWidth * 0.5f - title.m_fWidth - titleAttrib.CharGap, fOffsetY);
            }
            else
            {
                OffsetXY(title.m_nStart, title.m_nEnd, title.m_fWidth * -0.5f, fOffsetY);
            }
            if (nLineGap < titleAttrib.LineGap)
            {
                nLineGap = titleAttrib.LineGap;
            }
        }
        m_fLineOffsetY   += m_fCurLineHeight + nLineGap;
        m_nStartLineIndex = m_nTitleNumb;
    }
Ejemplo n.º 2
0
    void RebuildCharUV(ref CharacterInfo tempCharInfo)
    {
        if (m_aSprite.size == 0)
        {
            return;
        }
        UIFont uiFont = GetHUDTitleFont();
        int    nStart = 0, nEnd = 0;

        for (int i = 0; i < m_nTitleNumb; ++i)
        {
            HUDTilteLine title = m_TitleLine[i];
            if (string.IsNullOrEmpty(title.m_szValidText))
            {
                continue;
            }
            uiFont.PrepareQueryText(title.m_szValidText);
            nEnd   = title.m_nEnd;
            nStart = title.m_nStart;
            for (; nStart < nEnd; ++nStart)
            {
                HUDVertex v = m_aSprite[nStart];
                if (0 == v.AtlasID)
                {
                    uiFont.GetCharacterInfo(v.ch, ref tempCharInfo);
                    v.RebuildCharUV(tempCharInfo);
                    if (v.hudMesh != null)
                    {
                        v.hudMesh.VertexDirty();
                    }
                }
            }
        }
    }
Ejemplo n.º 3
0
    public void HideMeridianNumber()
    {
        if (m_nMeridianIndex > 0 && m_nMeridianIndex != m_nTitleNumb - 1)
        {
            return;
        }
        HUDTilteLine title = m_TitleLine[m_nMeridianIndex];

        if (title.m_nType != HUDTilteType.HeadIcon)
        {
            return;
        }
        int nStart = title.m_nStart;
        int nEnd   = title.m_nEnd;

        for (--nEnd; nEnd >= nStart && nEnd < m_aSprite.size; --nEnd)
        {
            HUDVertex v = m_aSprite[nEnd];
            if (v.hudMesh != null)
            {
                v.hudMesh.EraseHUDVertex(v);
            }
            v.hudMesh = null;
            m_aSprite.RemoveAt(nEnd);
            HUDVertex.ReleaseVertex(v);
        }
        m_nMeridianIndex = 0;
        --m_nTitleNumb;
        --m_nLines;
    }
Ejemplo n.º 4
0
 // 功能:显示头顶充脉数字
 void PushMeridianNumber(int nNumb)
 {
     if (m_nTitleNumb <= 0)
     {
         return;
     }
     if (m_nMeridianIndex != m_nTitleNumb - 1)
     {
         m_nMeridianIndex = m_nTitleNumb;
         // 添加
         if (m_TitleLine[m_nTitleNumb] == null)
         {
             m_TitleLine[m_nTitleNumb] = new HUDTilteLine();
         }
         m_TitleLine[m_nTitleNumb].m_nType       = HUDTilteType.HeadIcon;
         m_TitleLine[m_nTitleNumb].m_fWidth      = 0;
         m_TitleLine[m_nTitleNumb].m_nHeight     = 0;
         m_TitleLine[m_nTitleNumb].m_nStart      = m_aSprite.size;
         m_TitleLine[m_nTitleNumb].m_nEnd        = m_aSprite.size;
         m_TitleLine[m_nTitleNumb].m_szText      = string.Empty;
         m_TitleLine[m_nTitleNumb].m_nColorIndex = 0;
         m_TitleLine[m_nTitleNumb].m_nLine       = m_nLines;
         m_TitleLine[m_nTitleNumb].m_nSpriteID   = 0;
         ++m_nTitleNumb;
     }
     UpdateMeridianNumber(nNumb);
     m_nStartLineIndex = m_nMeridianIndex;
 }
Ejemplo n.º 5
0
    protected void RebuildForEditor()
    {
        Transform    tf         = m_tf;
        Vector3      vPos       = m_vPos;
        Vector2      vScreenPos = m_vScreenPos;
        HUDBloodType nBloodType = m_nBloodType;

        float fPos = HudSetting.Instance.m_fTestBloodPos;

        HUDTilteLine[] titles = new HUDTilteLine[m_nTitleNumb];
        int            nNumb  = m_nTitleNumb;

        for (int i = 0; i < m_nTitleNumb; ++i)
        {
            titles[i]               = new HUDTilteLine();
            titles[i].m_szText      = m_TitleLine[i].m_szText;
            titles[i].m_nType       = m_TitleLine[i].m_nType;
            titles[i].m_nColorIndex = m_TitleLine[i].m_nColorIndex;
            titles[i].m_nLine       = m_TitleLine[i].m_nLine;
            titles[i].m_nSpriteID   = m_TitleLine[i].m_nSpriteID;
        }
        Clear();
        m_tf         = tf;
        m_vPos       = vPos;
        m_vScreenPos = vScreenPos;
        m_nBloodType = nBloodType;
        int  nOldLine   = -1;
        bool bStartLine = false;

        for (int i = 0; i < nNumb; ++i)
        {
            HUDTilteLine title = titles[i];
            if (nOldLine != title.m_nLine)
            {
                if (bStartLine)
                {
                    EndTitle();
                }
                bStartLine = true;
                BeginTitle();
            }
            if (title.m_nType == HUDTilteType.Blood)
            {
                PushBlood(m_nBloodType, fPos);
            }
            else if (title.m_nSpriteID != 0)
            {
                PushIcon(title.m_nType, title.m_nSpriteID);
            }
            else
            {
                PushTitle(title.m_szText, title.m_nType, title.m_nColorIndex);
            }
            nOldLine = title.m_nLine;
        }
        if (bStartLine)
        {
            EndTitle();
        }
    }
Ejemplo n.º 6
0
    // 功能:设置血条
    // 参数:nType - 血条的类型
    //       fBloodPos - 血条的进度(百分比)
    public void PushBlood(HUDBloodType nType, float fBloodPos)
    {
        if (m_nTitleNumb >= m_TitleLine.Length)
        {
            return;
        }
        int nStart = m_aSprite.size;
        // 添加背景
        int nBkWidth    = HudSetting.Instance.m_nBloodBkWidth;
        int nBkHeight   = HudSetting.Instance.m_nBloodBkHeight;
        int nBloodWidth = HudSetting.Instance.m_nBloodWidth;
        int nHeight     = HudSetting.Instance.m_nBloodHeight;

        m_nBloodSpriteID = 0;
        if (nType == HUDBloodType.Blood_Green)
        {
            m_nBloodSpriteID = HudSetting.Instance.m_nBloodGreen;
        }
        else if (nType == HUDBloodType.Blood_Red)
        {
            m_nBloodSpriteID = HudSetting.Instance.m_nBloodRed;
        }
        else if (nType == HUDBloodType.Blood_Blue)
        {
            m_nBloodSpriteID = HudSetting.Instance.m_nBloodBlue;
        }

        PushSprite(HudSetting.Instance.m_nBloodBk, nBkWidth, nBkHeight, (nBloodWidth - nBkWidth) * 0.5f, 0);// (nBkHeight - nHeight) * 0.5f);
        PushSliceTitle(m_nBloodSpriteID, nBloodWidth, nHeight, 0.0f, 0.0f, fBloodPos);

        if (m_TitleLine[m_nTitleNumb] == null)
        {
            m_TitleLine[m_nTitleNumb] = new HUDTilteLine();
        }
        m_TitleLine[m_nTitleNumb].m_nType     = HUDTilteType.Blood;
        m_TitleLine[m_nTitleNumb].m_fWidth    = nBloodWidth;
        m_TitleLine[m_nTitleNumb].m_nHeight   = nHeight;
        m_TitleLine[m_nTitleNumb].m_nStart    = nStart;
        m_TitleLine[m_nTitleNumb].m_nEnd      = m_aSprite.size;
        m_TitleLine[m_nTitleNumb].m_szText    = string.Empty;
        m_TitleLine[m_nTitleNumb].m_nSpriteID = 0;

        m_nBloodType     = nType;
        m_nBloodIndex    = m_nTitleNumb;
        m_fCurLineWidth  = nBloodWidth;
        m_fCurLineHeight = nHeight;
        ++m_nTitleNumb;
    }
Ejemplo n.º 7
0
    public void PushIcon(HUDTilteType titleType, int nSpriteID)
    {
        HudTitleAttribute titleAttrib = HudSetting.Instance.TitleSets[(int)titleType].GetTitle(0);

        UISpriteInfo sp      = CAtlasMng.instance.GetSafeSpriteByID(nSpriteID);
        int          nWidth  = 0;
        int          nHeight = 0;
        int          nStart  = m_aSprite.size;

        if (sp != null)
        {
            nWidth  = (int)sp.outer.width;
            nHeight = (int)sp.outer.height;
            PushSprite(nSpriteID, nWidth, nHeight, 0.0f, titleAttrib.SpriteOffsetY);
        }
        if (m_TitleLine[m_nTitleNumb] == null)
        {
            m_TitleLine[m_nTitleNumb] = new HUDTilteLine();
        }
        m_TitleLine[m_nTitleNumb].m_nType       = titleType;
        m_TitleLine[m_nTitleNumb].m_fWidth      = nWidth;
        m_TitleLine[m_nTitleNumb].m_nHeight     = nHeight;
        m_TitleLine[m_nTitleNumb].m_nStart      = nStart;
        m_TitleLine[m_nTitleNumb].m_nEnd        = m_aSprite.size;
        m_TitleLine[m_nTitleNumb].m_szText      = string.Empty;
        m_TitleLine[m_nTitleNumb].m_nColorIndex = 0;
        m_TitleLine[m_nTitleNumb].m_nLine       = m_nLines;
        m_TitleLine[m_nTitleNumb].m_nSpriteID   = nSpriteID;

        if (titleAttrib.AlignType == HUDAlignType.align_center)
        {
            m_fCurLineWidth = nWidth;
        }
        nHeight += titleAttrib.SpriteReduceHeight;
        if (nHeight < titleAttrib.LockMaxHeight && titleAttrib.LockMaxHeight > 0)
        {
            nHeight = titleAttrib.LockMaxHeight;
        }
        if (m_fCurLineHeight < nHeight)
        {
            m_fCurLineHeight = nHeight;
        }
        ++m_nTitleNumb;
    }
Ejemplo n.º 8
0
    void UpdateMeridianNumber(int nMeridianNumb)
    {
        // 必须是在最后
        if (0 == m_nMeridianIndex || m_nMeridianIndex != m_nTitleNumb - 1)
        {
            return;
        }
        // 先释放旧的吧
        HUDTilteLine title = m_TitleLine[m_nMeridianIndex];

        if (title.m_nType != HUDTilteType.HeadIcon)
        {
            return;
        }
        if (nMeridianNumb < 0)
        {
            nMeridianNumb = 0;
        }
        m_nMeridianNumb = nMeridianNumb;
        HudTitleAttribute titleAttrib = HudSetting.Instance.TitleSets[(int)HUDTilteType.HeadIcon].GetTitle(0);
        int nCharGap = titleAttrib.CharGap;

        int nPow = 1;

        while (nPow * 10 <= nMeridianNumb)
        {
            nPow *= 10;
        }

        int nWidth     = 0;
        int nHeight    = 0;
        int nMaxWidth  = 0;
        int nMaxHeight = 0;

        int[] PicID     = HudSetting.Instance.MeridianPic;
        int   nSpriteID = 0;
        int   nValue    = nMeridianNumb;
        int   nStart    = title.m_nStart;
        int   nEnd      = title.m_nEnd;
        int   nX        = 0;

        while (nPow > 0)
        {
            int nIndex = nValue / nPow;
            nValue   %= nPow;
            nPow     /= 10;
            nSpriteID = PicID[nIndex];
            UISpriteInfo sp = CAtlasMng.instance.GetSafeSpriteByID(nSpriteID);
            nWidth     = (int)sp.outer.width;
            nHeight    = (int)sp.outer.height;
            nMaxWidth += nWidth + nCharGap;
            if (nMaxHeight < nHeight)
            {
                nMaxHeight = nHeight;
            }

            HUDVertex v = null;
            if (nStart < m_aSprite.size)
            {
                v = m_aSprite[nStart];
                if (v.AtlasID != sp.m_nAtlasID)
                {
                    if (v.hudMesh != null)
                    {
                        v.hudMesh.EraseHUDVertex(v);
                    }
                    v.hudMesh = null;
                    v.AtlasID = sp.m_nAtlasID;
                }
                v.SpriteID = nSpriteID;
                v.Offset.Set(nX, titleAttrib.SpriteOffsetY);
                v.InitSprite(nWidth, nHeight);
            }
            else
            {
                v = PushSprite(nSpriteID, nWidth, nHeight, nX, titleAttrib.SpriteOffsetY);
            }
            v.Scale = m_fScale;

            if (v.hudMesh == null)
            {
                if (m_bInitHUDMesh)
                {
                    v.hudMesh = m_pBatcher.m_MeshRender.QueryMesh(sp.m_nAtlasID);
                    v.hudMesh.PushHUDVertex(v);
                }
            }
            else
            {
                v.hudMesh.VertexDirty();
            }
            nX = nMaxWidth;
            ++nStart;
        }

        title.m_nEnd = nStart;
        // 删除多余的
        for (--nEnd; nEnd >= nStart; --nEnd)
        {
            HUDVertex v = m_aSprite[nEnd];
            if (v.hudMesh != null)
            {
                v.hudMesh.EraseHUDVertex(v);
            }
            v.hudMesh = null;
            m_aSprite.RemoveAt(nEnd);
            HUDVertex.ReleaseVertex(v);
        }

        nMaxWidth       -= nCharGap;
        title.m_fWidth   = nMaxWidth;
        title.m_nHeight  = nMaxHeight;
        nMaxHeight      += titleAttrib.SpriteReduceHeight;
        m_fCurLineWidth  = nMaxWidth;
        m_fCurLineHeight = nMaxHeight;
    }
Ejemplo n.º 9
0
    // 必须先有居中的
    public void PushTitle(string szText, HUDTilteType titleType, int nColorIndex)
    {
        if (m_nTitleNumb >= m_TitleLine.Length)
        {
            return;
        }

        UIFont        mFont        = GetHUDTitleFont();
        CharacterInfo tempCharInfo = new CharacterInfo();

        HudTitleAttribute titleAttrib = HudSetting.Instance.TitleSets[(int)titleType].GetTitle(nColorIndex);
        int nLineGap = titleAttrib.LineGap;
        int nCharGap = titleAttrib.CharGap;

        HUDTextParse hudParse = HUDTextParse.Instance;

        hudParse.ParseText(szText);
        mFont.PrepareQueryText(hudParse.m_szText);

        HudTitleAttribute.Effect nStyle = titleAttrib.Style;
        int nSpriteCount = hudParse.m_SpriteCount;

        HUDCharInfo[] Sprites = hudParse.m_Sprites;
        char          ch;
        float         fShadowX     = titleAttrib.OffsetX;
        float         fShadowY     = titleAttrib.OffsetY;
        float         fx           = 0.0f;
        Color32       clrLeftUp    = titleAttrib.clrLeftUp;
        Color32       clrLeftDown  = titleAttrib.clrLeftDown;
        Color32       clrRightUp   = titleAttrib.clrRightUp;
        Color32       clrRightDown = titleAttrib.clrRightDown;
        Color32       clrShadow    = titleAttrib.clrShadow;
        Color32       clrCustom;

        int nStart       = m_aSprite.size;
        int nHeight      = mFont.GetFontHeight();
        int nFontH       = titleAttrib.Height;
        int nFontOffsetY = titleAttrib.FontOffsetY;
        int nY           = 0;

        for (int i = 0; i < nSpriteCount; ++i)
        {
            if (Sprites[i].bChar)
            {
                ch = Sprites[i].ch;
                mFont.GetCharacterInfo(ch, ref tempCharInfo);
                nY = (tempCharInfo.glyphHeight - nFontH) / 2 + nFontOffsetY;

                if (nStyle != HudTitleAttribute.Effect.None)
                {
                    PushShadow(ref tempCharInfo, ch, fx, nY, clrShadow, fShadowX, fShadowY);
                    if (nStyle == HudTitleAttribute.Effect.Outline)
                    {
                        PushShadow(ref tempCharInfo, ch, fx, nY, clrShadow, fShadowX, -fShadowY);
                        PushShadow(ref tempCharInfo, ch, fx, nY, clrShadow, -fShadowX, fShadowY);
                        PushShadow(ref tempCharInfo, ch, fx, nY, clrShadow, -fShadowX, -fShadowY);
                    }
                }
                if (Sprites[i].bCustomColor)
                {
                    clrCustom = Sprites[i].CustomColor;
                    HUDVertex node = PushChar(ref tempCharInfo, ch, fx, nY, clrCustom, clrCustom, clrCustom, clrCustom);
                    fx += node.width + nCharGap;
                }
                else
                {
                    HUDVertex node = PushChar(ref tempCharInfo, ch, fx, nY, clrLeftUp, clrLeftDown, clrRightUp, clrRightDown);
                    fx += node.width + nCharGap;
                }
            }
            else
            {
                // 图片
                if (Sprites[i].CharType == UIFontUnitType.UnitType_Icon)
                {
                    HUDVertex node = PushSprite(Sprites[i].SpriteID, Sprites[i].SpriteWidth, Sprites[i].SpriteHeight, fx, titleAttrib.SpriteOffsetY);
                    fx += node.width + nCharGap;
                    if (nHeight < node.height - titleAttrib.SpriteReduceHeight)
                    {
                        nHeight = node.height - titleAttrib.SpriteReduceHeight;
                    }
                }
            }
        }

        if (m_TitleLine[m_nTitleNumb] == null)
        {
            m_TitleLine[m_nTitleNumb] = new HUDTilteLine();
        }
        m_TitleLine[m_nTitleNumb].m_nType       = titleType;
        m_TitleLine[m_nTitleNumb].m_fWidth      = fx - nCharGap;
        m_TitleLine[m_nTitleNumb].m_nHeight     = nHeight;
        m_TitleLine[m_nTitleNumb].m_nStart      = nStart;
        m_TitleLine[m_nTitleNumb].m_nEnd        = m_aSprite.size;
        m_TitleLine[m_nTitleNumb].m_szText      = szText;
        m_TitleLine[m_nTitleNumb].m_szValidText = hudParse.m_szText;
        m_TitleLine[m_nTitleNumb].m_nColorIndex = nColorIndex;
        m_TitleLine[m_nTitleNumb].m_nLine       = m_nLines;
        m_TitleLine[m_nTitleNumb].m_nSpriteID   = 0;

        if (titleAttrib.AlignType == HUDAlignType.align_center)
        {
            m_fCurLineWidth = fx - nCharGap;
        }
        if (nHeight < titleAttrib.LockMaxHeight && titleAttrib.LockMaxHeight > 0)
        {
            nHeight = titleAttrib.LockMaxHeight;
        }
        if (m_fCurLineHeight < nHeight)
        {
            m_fCurLineHeight = nHeight;
        }
        ++m_nTitleNumb;
    }