예제 #1
0
        public int DoStep(ref TextCotext context, EmojiEvent uievent)
        {
            if (uievent == EmojiEvent.PreRender)
            {
                for (int i = 0; i < context.Results.Count; i++)
                {
                    var result = context.Results[i];
                    var text   = context.AllTexts[i];
                    if (text == null)
                    {
                        continue;
                    }

                    var hrefmesh = result.MeshGroup.HrefMeshReult;
                    hrefmesh.Init();

                    for (int k = 0; k < result.MeshGroup.TextMeshResult.EmojiVerts.Count; k += 4)
                    {
                        int emojiindex = k / 4;
                        int arrayindex;
                        int emojitype = result.ParseGroup.GetIndexType(emojiindex, out arrayindex);

                        if (emojitype == 2 && arrayindex >= 0 && arrayindex < result.ParseGroup.HrefResult.Count)
                        {
                            var hrefcolor = result.ParseGroup.HrefResult.GetHrefCols()[arrayindex];

                            var p2    = result.MeshGroup.TextMeshResult.EmojiVerts[k + 2];
                            var p3    = result.MeshGroup.TextMeshResult.EmojiVerts[k + 3];
                            var width = p2.x - p3.x;
                            //
                            var botmid = (p3 + p2) / 2;

                            for (int m = 0; m < 4; m++)
                            {
                                var uivert = new EmojiUIVertex();
                                uivert.color   = hrefcolor;
                                uivert.normal  = Vector3.back;
                                uivert.tangent = new Vector4(1.0f, 0.0f, 0.0f, -1.0f);

                                float wc  = ((m & 2) >> 1) == (m & 1) ? -0.5f : 0.5f;
                                float hc  = (m & 2) == 0 ? -0.5f : 0.5f;
                                var   pos = botmid + new Vector3(wc * width, (hc * HrefLine * text.fontSize) / 10);//result.MeshGroup.TextMeshResult.EmojiVerts[k + m];

                                uivert.position = pos;
                                hrefmesh.HrefVerts.Add(uivert);
                            }
                        }
                    }

                    result.MeshGroup.HrefMeshReult = hrefmesh;
                    context.Results[i]             = result;
                }
            }
            return(0);
        }
예제 #2
0
        UIVertex GetUiWorldVert(EmojiUIVertex vert)
        {
            UIVertex uivert   = new UIVertex();
            Vector3  worldpos = _cachetext.transform.TransformPoint(vert.position);

            uivert.position = worldpos;
            uivert.normal   = vert.normal;
            uivert.color    = vert.color;
            uivert.tangent  = vert.tangent;
            uivert.uv0      = vert.uv0;
            uivert.uv1      = vert.uv1;
            uivert.uv2      = vert.uv2;
            uivert.uv3      = vert.uv3;

            return(uivert);
        }
예제 #3
0
        UIVertex GetUiVert(EmojiUIVertex vert, float fixz)
        {
            UIVertex uivert   = new UIVertex();
            Vector3  worldpos = _cachetext.transform.TransformPoint(vert.position);
            Vector3  localpos = transform.InverseTransformPoint(worldpos);

            uivert.position = new Vector3(localpos.x, localpos.y, fixz);
            uivert.normal   = vert.normal;
            uivert.color    = vert.color;
            uivert.tangent  = vert.tangent;
            uivert.uv0      = vert.uv0;
            uivert.uv1      = vert.uv1;
            uivert.uv2      = vert.uv2;
            uivert.uv3      = vert.uv3;

            return(uivert);
        }
예제 #4
0
        public int DoStep(ref TextCotext context, EmojiEvent uievent)
        {
            if (uievent == EmojiEvent.PreRender)
            {
                for (int i = 0; i < context.Results.Count; i++)
                {
                    var result = context.Results[i];

                    var emojimesh = result.MeshGroup.EmojiMeshResult;
                    emojimesh.Init();


                    for (int k = 0; k < result.MeshGroup.TextMeshResult.EmojiVerts.Count; k += 4)
                    {
                        int emojiindex = k / 4;
                        int arrayindex;
                        int emojitype = result.ParseGroup.GetIndexType(emojiindex, out arrayindex);

                        if (emojitype == 1 && arrayindex >= 0 && arrayindex < result.ParseGroup.EmojiResult.Count)
                        {
                            var group = result.ParseGroup.EmojiResult.GetGroups()[arrayindex];
                            emojimesh.FrameIndex.Add(0);
                            emojimesh.RenderGroup.Add(group);

                            var center = (result.MeshGroup.TextMeshResult.EmojiVerts[k] + result.MeshGroup.TextMeshResult.EmojiVerts[k + 1]
                                          + result.MeshGroup.TextMeshResult.EmojiVerts[k + 2] + result.MeshGroup.TextMeshResult.EmojiVerts[k + 3]) / 4;


                            for (int m = 0; m < 4; m++)
                            {
                                var uivert = new EmojiUIVertex();

                                var sprite = group.spritegroups[0];
                                uivert.uv0     = sprite.uv[3 - m];
                                uivert.uv1     = sprite.uv[3 - m];
                                uivert.uv2     = sprite.uv[3 - m];
                                uivert.uv3     = sprite.uv[3 - m];
                                uivert.color   = Color.white;
                                uivert.normal  = Vector3.back;
                                uivert.tangent = new Vector4(1.0f, 0.0f, 0.0f, -1.0f);
                                uivert.texture = sprite.sprite.texture;


                                float wc = ((m & 2) >> 1) == (m & 1) ? -0.5f : 0.5f;
                                float hc = (m & 2) == 0 ? -0.5f : 0.5f;

                                float emojisize = result.ParseGroup.EmojiResult.GetEmojiSize()[arrayindex];

                                var position = center + new Vector3(wc * emojisize, hc * emojisize, 0);
                                uivert.position = position;
                                emojimesh.EmojiVerts.Add(uivert);
                            }
                        }
                    }

                    result.MeshGroup.EmojiMeshResult = emojimesh;
                    context.Results[i] = result;
                }
            }

            return(0);
        }