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); }
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); }
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); }
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); }