Esempio n. 1
0
        private static void UF_HandleToken(List <TextToken> tokens, List <OutLineData> listOutLineDatas)
        {
            int overlying = 0;

            listOutLineDatas.Clear();
            for (int k = 0; k < tokens.Count; k++)
            {
                if (tokens [k].type == TextTokenType.HEAD_O)
                {
                    overlying++;
                    for (int i = k + 1; i < tokens.Count; i++)
                    {
                        if (tokens [i].type == TextTokenType.HEAD_O)
                        {
                            overlying++;
                        }
                        else if (tokens [i].type == TextTokenType.END_O)
                        {
                            overlying--;
                            if (overlying == 0)
                            {
                                OutLineData ldData = new OutLineData();
                                //解析buff 内容
                                int idxHref  = tokens[k].buffer.IndexOf("#");
                                int idxValue = tokens[k].buffer.IndexOf("v=");
                                ldData.idx    = tokens [k].index;
                                ldData.length = tokens [i].index - tokens [k].index;

                                ldData.color  = new Color32(0, 0, 0, 255);
                                ldData.offset = new Vector4(0.68f, 0.68f, 0, 0);
                                if (idxHref > -1)
                                {
                                    ldData.color = RichText.UF_ReadColor(tokens [k].buffer, idxHref + 1);
                                }
                                if (idxValue > -1)
                                {
                                    ldData.offset = RichText.UF_ReadVector4(tokens [k].buffer, idxValue + 2);
                                }
                                listOutLineDatas.Add(ldData);
                                //嵌套类型只有最外层有效
                                k = i;
                                break;
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        //描边必须放在最后
        private static void UF_HandleMesh(List <UIVertex> uivertexs, List <OutLineData> listOutLineDatas, int startIndex)
        {
            if (uivertexs.Count == 0 || listOutLineDatas.Count == 0)
            {
                return;
            }

            //Vector2 uvPoint = Vector2.zero;

            int charCount = uivertexs.Count / 6;

            UIVertex[] rawUIVeterxs = uivertexs.ToArray();
            uivertexs.Clear();
            for (int k = 0; k < listOutLineDatas.Count; k++)
            {
                OutLineData ldData = listOutLineDatas [k];
                if (ldData.idx + ldData.length > charCount)
                {
                    break;
                }
                UF_PopulateOutLineMesh(uivertexs, rawUIVeterxs, startIndex + ldData.idx * 6, ldData.length * 6, ldData.offset, ldData.color);
            }
            uivertexs.AddRange(rawUIVeterxs);
        }