Beispiel #1
0
        public void UpdateAnimationEmoji()
        {
            for (int i = 0, count = AnimitonEmojiList.Count; i < count; ++i)
            {
                var   animationEmoji = AnimitonEmojiList[i];
                var   emoji          = EmojiList[animationEmoji.emojiIndex];
                var   delta          = animationEmoji.timeDelta + Time.deltaTime;
                float rate           = emoji.frameRate > 0 ? 1f / emoji.frameRate : 0;

                if (delta > rate)
                {
                    delta = (rate > 0f) ? delta - rate : 0f;
                    var emojiPlayIndex = animationEmoji.playEmojiIndex;
                    ++emojiPlayIndex;

                    if (emojiPlayIndex >= emoji.spriteList.Count)
                    {
                        emojiPlayIndex = 0;
                    }

                    var uv = DataUtility.GetOuterUV(emoji.spriteList[emojiPlayIndex]);

                    var vertex1Index = animationEmoji.vertextStartIndex;
                    var vertex1      = Vertices[vertex1Index];
                    vertex1.uv1 = new Vector2(uv.x, uv.y);
                    ;
                    Vertices[vertex1Index] = vertex1;

                    vertex1Index = animationEmoji.vertextStartIndex + 1;
                    var vertex2 = Vertices[vertex1Index];
                    vertex2.uv1            = new Vector2(uv.x, uv.w);
                    Vertices[vertex1Index] = vertex2;

                    vertex1Index = animationEmoji.vertextStartIndex + 2;
                    var vertex3 = Vertices[vertex1Index];
                    vertex3.uv1            = new Vector2(uv.z, uv.w);
                    Vertices[vertex1Index] = vertex3;

                    vertex1Index = animationEmoji.vertextStartIndex + 3;
                    var vertex4 = Vertices[vertex1Index];
                    vertex4.uv1            = new Vector2(uv.z, uv.y);
                    Vertices[vertex1Index] = vertex4;

                    animationEmoji.playEmojiIndex = emojiPlayIndex;
                }

                animationEmoji.timeDelta = delta;
                AnimitonEmojiList[i]     = animationEmoji;
            }

            OnPopulateMeshImmediately(s_ImageVertexHelper);
            s_ImageVertexHelper.FillMesh(ImageMesh);
            canvasRenderer.SetMesh(ImageMesh);
        }
Beispiel #2
0
 private void UpdateGeometry()
 {
     vh.Clear();
     OnPopulateMesh(vh);
     vh.FillMesh(WorkMesh);
     canvasRenderer.SetMesh(WorkMesh);
 }
Beispiel #3
0
 // Token: 0x06009DB7 RID: 40375 RVA: 0x003A96F0 File Offset: 0x003A78F0
 protected virtual void NGKFJEFNJPC(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("No Name");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #4
0
 // Token: 0x06009DDE RID: 40414 RVA: 0x003A9825 File Offset: 0x003A7A25
 protected override void OnPopulateMesh(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("Populate Mesh Data");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #5
0
 // Token: 0x06009DDC RID: 40412 RVA: 0x003A9800 File Offset: 0x003A7A00
 protected virtual void LMFBMHPKGJJ(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("keep aspect ratio");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #6
0
 // Token: 0x06009DD8 RID: 40408 RVA: 0x003A97DB File Offset: 0x003A79DB
 protected virtual void MGKBAMLHFBH(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("If you host Photon yourself, make sure to start the 'Instance LoadBalancing' ");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #7
0
        protected override void OnPopulateMesh(Mesh toFill)
        {
            if (font == null)
            {
                return;
            }

            if (TextGenerator.IsRequestingCharactersInTexture)
            {
                return;
            }

            //フォントの再作成によるものであればその旨を通知
            if (!isDirtyVerts)
            {
                TextGenerator.IsRebuidFont = true;
            }

            IList <UIVertex> verts = TextGenerator.CreateVertex();

            using (var vh = new VertexHelper())
            {
                for (int i = 0; i < verts.Count; ++i)
                {
                    int tempVertsIndex = i & 3;
                    m_TempVerts[tempVertsIndex] = verts[i];
                    if (tempVertsIndex == 3)
                    {
                        vh.AddUIVertexQuad(m_TempVerts);
                    }
                }
                vh.FillMesh(toFill);
            }
            isDirtyVerts = false;
        }
Beispiel #8
0
    // Start is called before the first frame update
    protected override void OnPopulateMesh(Mesh AMesh)
    {
        float   AXPos   = 0f;
        Color32 color32 = Color.black;
        int     AidxNo  = 0;

        //this.rectTransform.rect.width;

        using (var vh = new VertexHelper())
        {
            float AccWidth;
            float ARight = (this.rectTransform.rect.width / 2);

            AidxNo   = 0; AXPos = -(this.rectTransform.rect.width / 2);
            AccWidth = AXPos;

            AccWidth = 0;
            while (AXPos < ARight)
            {
                AccWidth = AccWidth + this.drawVertBeam(vh, AXPos, 15, color32, AidxNo);

                AXPos  = AXPos + 5;
                AidxNo = AidxNo + 6;
            }

            vh.FillMesh(AMesh);
        }
    }
Beispiel #9
0
 // Token: 0x06009DC9 RID: 40393 RVA: 0x003A976C File Offset: 0x003A796C
 protected virtual void HLACFEJLMPL(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("kick");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #10
0
 // Token: 0x06009DB3 RID: 40371 RVA: 0x003A969C File Offset: 0x003A789C
 protected virtual void MDDCLKMECFH(VertexHelper CBFPMKACAHH)
 {
     Debug.Log(" ");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #11
0
 // Token: 0x06009DBE RID: 40382 RVA: 0x003A971D File Offset: 0x003A791D
 protected virtual void OCGJOFMAJNP(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("Chat");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #12
0
 /// <summary>
 /// Call used to modify mesh.
 /// </summary>
 void IMeshModifier.ModifyMesh(VertexHelper verts)
 {
     if (isActiveAndEnabled)
     {
         verts.FillMesh(mesh);
     }
 }
Beispiel #13
0
        public void Rebuild(CanvasUpdate executing)
        {
            if (m_Data == null)
            {
                return;
            }

            if (executing != CanvasUpdate.PreRender)
            {
                return;
            }

            float width = currentWidth;

#if UNITY_EDITOR
            if (!Application.isPlaying)
            {
                width = maxWidth;
            }
#endif
            VertexHelper vh = Tools.vertexHelper;
            vh.Clear();
            m_Data.Render(width, vh);

            Mesh workerMesh = SymbolText.WorkerMesh;
            vh.FillMesh(workerMesh);
            canvasRenderer.SetMesh(workerMesh);
        }
Beispiel #14
0
    void Start()
    {
        VertexHelper vp = new VertexHelper();

        vp.Clear();
        //这里采用的添加顶点函数,函数参数分别对应了顶点位置,顶点颜色,纹理坐标
        vp.AddVert(new Vector3(0, 0, 0), Color.red, new Vector2(0, 0));
        vp.AddVert(new Vector3(0, 100, 0), Color.green, new Vector2(0, 100));
        vp.AddVert(new Vector3(100, 100, 0), Color.blue, new Vector2(1, 100));
        vp.AddVert(new Vector3(100, 0, 0), Color.cyan, new Vector2(100, 0));

        //添加三角形
        vp.AddTriangle(0, 1, 2);
        vp.AddTriangle(2, 3, 0);

        MeshFilter meshFilter = this.GetComponent <MeshFilter>();

        if (meshFilter == null)
        {
            meshFilter = gameObject.AddComponent <MeshFilter>();
        }

        MeshRenderer render = this.GetComponent <MeshRenderer>();

        if (render == null)
        {
            render = gameObject.AddComponent <MeshRenderer>();
        }

        Mesh mesh = new Mesh();

        vp.FillMesh(mesh);
        meshFilter.mesh = mesh;
        //render.material.color = Color.red;
    }
Beispiel #15
0
    protected override void OnPopulateMesh(Mesh vh)
    {
        vh.Clear();
        VertexHelper vbo  = new VertexHelper(vh);
        float        dist = Vector2.Distance(P1, P2);

        if (thickness > dist)
        {
            thickness = dist;
        }
        float alpha    = Mathf.Atan2(P2.y - P1.y, P2.x - P1.x);
        float shiftRad = Mathf.Deg2Rad * 90f;
        float radP     = alpha + shiftRad;
        float radN     = alpha - shiftRad;
        float cP       = thickness / 2 * Mathf.Cos(radP);
        float sP       = thickness / 2 * Mathf.Sin(radP);
        float cN       = thickness / 2 * Mathf.Cos(radN);
        float sN       = thickness / 2 * Mathf.Sin(radN);

        Vector2 uv0  = new Vector2(0, 0);
        Vector2 uv1  = new Vector2(0, 1);
        Vector2 uv2  = new Vector2(1, 1);
        Vector2 uv3  = new Vector2(1, 0);
        Vector2 pos0 = new Vector2(P1.x + cP, P1.y + sP);
        Vector2 pos1 = new Vector2(P2.x + cP, P2.y + sP);
        Vector2 pos2 = new Vector2(P2.x + cN, P2.y + sN);
        Vector2 pos3 = new Vector2(P1.x + cN, P1.y + sN);

        vbo.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));

        vbo.FillMesh(vh);
    }
Beispiel #16
0
 // Token: 0x06009DD4 RID: 40404 RVA: 0x003A9791 File Offset: 0x003A7991
 protected virtual void LHGFMLDJBBA(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("_Value5");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
        public void UpdateSubmesh(bool tesselate, bool curve)
        {
            //find required components
            if (TMPsub == null)
            {
                TMPsub = gameObject.GetComponent <TMP_SubMeshUI>();
            }

            if (TMPsub == null)
            {
                return;
            }

            if (TMPtext == null)
            {
                TMPtext = GetComponentInParent <TextMeshProUGUI>();
            }

            if (crvdVE == null)
            {
                crvdVE = gameObject.AddComponentIfMissing <CurvedUIVertexEffect>();
            }


            //perform tesselatio and curving
            if (tesselate || straightMesh == null || vh == null || (!Application.isPlaying))
            {
                vh = new VertexHelper(TMPsub.mesh);

                //save straight mesh - it will be curved then every time the object moves on the canvas.
                straightMesh = new Mesh();
                vh.FillMesh(straightMesh);

                curve = true;
            }


            if (curve)
            {
                //Debug.Log("Submesh: Curve", this.gameObject);
                vh = new VertexHelper(straightMesh);
                crvdVE.ModifyMesh(vh);
                curvedMesh = new Mesh();
                vh.FillMesh(curvedMesh);
                crvdVE.CurvingRequired = true;
            }

            //upload mesh to TMP object's renderer
            TMPsub.canvasRenderer.SetMesh(curvedMesh);


            //cleanup for not needed submeshes.
            if (TMPtext != null && TMPtext.textInfo.materialCount < 2)
            {
                //Each submesh uses 1 additional material.
                //If materialCount is 1, this means Submesh is not needed. Bounce it to toggle cleanup.
                TMPsub.enabled = false;
                TMPsub.enabled = true;
            }
        }
Beispiel #18
0
 // Token: 0x06009DD7 RID: 40407 RVA: 0x003A97B6 File Offset: 0x003A79B6
 protected virtual void HJFGAKFDGEH(VertexHelper CBFPMKACAHH)
 {
     Debug.Log("AppID: {0}*** GameVersion: {1} PeerId: {2} ");
     CBFPMKACAHH.Clear();
     CBFPMKACAHH.FillMesh(this.m_mesh);
     base.OnPopulateMesh(CBFPMKACAHH);
 }
Beispiel #19
0
    private IEnumerator Write(VertexHelper vh)
    {
        IsWorking = true;

        _canWait = true;
        HideLetters(vh);
        var waitforLetter = new WaitForSeconds(this._waitBetweenLetters);
        var lenght        = original.Count / 6;

        for (var i = 0; i < lenght; ++i)
        {
            for (var j = 0; j < 6; ++j)
            {
                var index  = (i * 6) + j;
                var tmpVer = modified[index];
                tmpVer.position = original[index].position;
                modified[index] = tmpVer;
            }
            vh.AddUIVertexTriangleStream(modified);
            vh.FillMesh(_mesh);
            _canvasRendered.SetMesh(_mesh);
            if (_canWait)
            {
                yield return(waitforLetter);
            }
        }
        IsWorking = false;
        if (OnFinish != null)
        {
            OnFinish.Invoke( );
        }
        yield return(null);
    }
Beispiel #20
0
    /// <summary>
    /// Modifies the mesh. 最重要的重载函数
    /// </summary>
    /// <param name="mesh">Mesh.</param>
    public override void ModifyMesh(/*List<UIVertex> verts*/ Mesh mesh)
    {
        if (!IsActive())
        {
            return;
        }

        // 从mesh 得到 顶点集
        List <UIVertex> verts = new List <UIVertex> ();

        using (VertexHelper vertexHelper = new VertexHelper(mesh))
        {
            vertexHelper.GetUIVertexStream(verts);
        }

        // 顶点的 y值按曲线变换
        for (int index = 0; index < verts.Count; index++)
        {
            var uiVertex = verts[index];
            //Debug.Log ();
            uiVertex.position.y += curveForText.Evaluate(rectTrans.rect.width * rectTrans.pivot.x + uiVertex.position.x) * curveMultiplier;
            verts[index]         = uiVertex;
        }

        // 在合成mesh
        using (VertexHelper vertexHelper2 = new VertexHelper())
        {
            vertexHelper2.AddUIVertexTriangleStream(verts);
            vertexHelper2.FillMesh(mesh);
        }
    }
Beispiel #21
0
        protected override void OnPopulateMesh(Mesh toFill)
        {
            float outer = -rectTransform.pivot.x * rectTransform.rect.width;
            float inner = -rectTransform.pivot.x * rectTransform.rect.width + this.thickness;

            toFill.Clear();
            var vbo = new VertexHelper(toFill);

            Vector2 prevX = Vector2.zero;
            Vector2 prevY = Vector2.zero;
            Vector2 uv0   = new Vector2(0, 0);
            Vector2 uv1   = new Vector2(0, 1);
            Vector2 uv2   = new Vector2(1, 1);
            Vector2 uv3   = new Vector2(1, 0);
            Vector2 pos0;
            Vector2 pos1;
            Vector2 pos2;
            Vector2 pos3;

            float f       = (this.fillPercent / 100f);
            float degrees = 360f / segments;
            int   fa      = (int)((segments + 1) * f);


            for (int i = 0; i < fa; i++)
            {
                float rad = Mathf.Deg2Rad * (i * degrees);
                float c   = Mathf.Cos(rad);
                float s   = Mathf.Sin(rad);

                uv0 = new Vector2(0, 1);
                uv1 = new Vector2(1, 1);
                uv2 = new Vector2(1, 0);
                uv3 = new Vector2(0, 0);

                pos0 = prevX;
                pos1 = new Vector2(outer * c, outer * s);

                if (fill)
                {
                    pos2 = Vector2.zero;
                    pos3 = Vector2.zero;
                }
                else
                {
                    pos2 = new Vector2(inner * c, inner * s);
                    pos3 = prevY;
                }

                prevX = pos1;
                prevY = pos2;

                vbo.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));
            }

            if (vbo.currentVertCount > 3)
            {
                vbo.FillMesh(toFill);
            }
        }
Beispiel #22
0
        //private void ResetData()
        //{
        //    if (m_mesh && false)
        //    {
        //        Debug.Log("Drawing Mesh");
        //        var cr = GetComponent<CanvasRenderer>();
        //        cr.SetMesh(m_mesh);
        //        if (m_materials != null && m_materials.Count > 0)
        //        {
        //            Debug.Log("Adding Materials");
        //            cr.materialCount = m_materials.Count;

        //            for (int i = 0; i < m_materials.Count; i++)
        //                cr.SetMaterial(m_materials[i], i);
        //        }
        //    }
        //}

        protected override void OnPopulateMesh(VertexHelper vh)
        {
            Debug.Log("Populate Mesh Data");
            vh.Clear();
            vh.FillMesh(m_mesh);
            base.OnPopulateMesh(vh);
        }
        public static Mesh CreateMesh(this VertexHelper vh)
        {
            var m = new Mesh();

            vh.FillMesh(m);
            return(m);
        }
Beispiel #24
0
//	public float xRadius = 50;
//	public float yRadius = 50;
    //http://www.mathopenref.com/coordparamellipse.html

//	public void SetRadii (Vector2 v){
////		xRadius = v.x;
////		yRadius = v.y;
//		rectTransform.sizeDelta = new Vector2(Mathf.Abs(v.x)*2, Mathf.Abs(v.y)*2);
//	}

    protected override void OnPopulateMesh(Mesh vh)
    {
        float A = rectTransform.rect.width / 2;
        float B = rectTransform.rect.height / 2;

        float Ai = A - this.thickness;
        float Bi = B - this.thickness;


        vh.Clear();
        VertexHelper vbo = new VertexHelper(vh);

        Vector2 prevX = Vector2.zero;
        Vector2 prevY = Vector2.zero;
        Vector2 uv0   = new Vector2(0, 0);
        Vector2 uv1   = new Vector2(0, 1);
        Vector2 uv2   = new Vector2(1, 1);
        Vector2 uv3   = new Vector2(1, 0);
        Vector2 pos0;
        Vector2 pos1;
        Vector2 pos2;
        Vector2 pos3;

        float f       = (360 / 360f);
        float degrees = 360f / segments;
        int   fa      = (int)(segments * f);

        plus       = 0;
        shapeVerts = new Vector3[4 * (fa + 1)];
        Vector3[] boundaryVerts = new Vector3[fa + 1];       //overlap

        for (int i = 0; i <= fa; i++)
        {
            float rad = Mathf.Deg2Rad * (-i * degrees);
            float c   = Mathf.Cos(rad);
            float s   = Mathf.Sin(rad);

            pos0 = prevX;
            pos1 = new Vector2(A * c, B * s);

            if (fill)
            {
                boundaryVerts [i] = pos1;
                pos2 = Vector2.zero;
                pos3 = Vector2.zero;
            }
            else
            {
                pos2 = new Vector2(Ai * c, Bi * s);
                pos3 = prevY;
            }

            prevX = pos1;
            prevY = pos2;

            vbo.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));
        }
        shapeVerts = boundaryVerts;
        vbo.FillMesh(vh);
    }
 public override void ModifyMesh(Mesh mesh)
 {
     if (IsActive())
     {
         List <UIVertex> list = new List <UIVertex>();
         using (VertexHelper vertexHelper = new VertexHelper(mesh))
         {
             vertexHelper.GetUIVertexStream(list);
         }
         Text  component = GetComponent <Text>();
         float num       = 1f;
         if ((bool)component && component.resizeTextForBestFit)
         {
             num = (float)component.cachedTextGenerator.fontSizeUsedForBestFit / (float)(component.resizeTextMaxSize - 1);
         }
         int start = 0;
         int count = list.Count;
         ApplyShadowZeroAlloc(list, base.effectColor, start, list.Count, base.effectDistance.x * num, base.effectDistance.y * num);
         start = count;
         count = list.Count;
         ApplyShadowZeroAlloc(list, base.effectColor, start, list.Count, base.effectDistance.x * num, (0f - base.effectDistance.y) * num);
         start = count;
         count = list.Count;
         ApplyShadowZeroAlloc(list, base.effectColor, start, list.Count, (0f - base.effectDistance.x) * num, base.effectDistance.y * num);
         start = count;
         count = list.Count;
         ApplyShadowZeroAlloc(list, base.effectColor, start, list.Count, (0f - base.effectDistance.x) * num, (0f - base.effectDistance.y) * num);
         using (VertexHelper vertexHelper2 = new VertexHelper())
         {
             vertexHelper2.AddUIVertexTriangleStream(list);
             vertexHelper2.FillMesh(mesh);
         }
     }
 }
Beispiel #26
0
        public override void ModifyMesh(Mesh mesh)
        {
            if (modifyMesh > 0)
            {
                return;
            }

            try
            {
                ++modifyMesh;

                if (!Application.isPlaying || !IsActive())
                {
                    return;
                }

                _SyncGraphics();

                using (var helper = new VertexHelper())
                {
                    helper.FillMesh(mesh);
                }
            }
            finally
            {
                --modifyMesh;
            }
        }
Beispiel #27
0
        protected void OnFillVBO(Mesh vbo)
        {
            if (this.isFocused && !this.HasTextSelection)
            {
                using (VertexHelper vbo1 = new VertexHelper())
                {
                    Rect    rect            = this.m_TextComponent.rectTransform.rect;
                    Vector2 size            = rect.size;
                    Vector2 textAnchorPivot = Text.GetTextAnchorPivot(this.m_TextComponent.alignment);
                    Vector2 zero            = Vector2.zero;
                    zero.x = Mathf.Lerp(rect.xMin, rect.xMax, textAnchorPivot.x);
                    zero.y = Mathf.Lerp(rect.yMin, rect.yMax, textAnchorPivot.y);
                    Vector2 roundingOffset = this.m_TextComponent.PixelAdjustPoint(zero) - zero + Vector2.Scale(size, textAnchorPivot);
                    roundingOffset.x = roundingOffset.x - Mathf.Floor(0.5f + roundingOffset.x);
                    roundingOffset.y = roundingOffset.y - Mathf.Floor(0.5f + roundingOffset.y);
                    this.GenerateCaret(vbo1, roundingOffset);
                    vbo1.FillMesh(vbo);
                }
            }
            else
            {
                if (m_OnFillVBOInfo == null)
                {
                    m_OnFillVBOInfo = typeof(InputField).GetMethod("OnFillVBO", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
                }

                if (m_OnFillVBOInfo != null)
                {
                    m_OnFillVBOInfo.Invoke(this, new object[] { vbo });
                }
            }
        }
        public void UpdateSubmesh(bool tesselate, bool curve)
        {
            TMP_SubMeshUI TMPsub = gameObject.GetComponent <TMP_SubMeshUI>();

            if (TMPsub == null)
            {
                return;
            }

            CurvedUIVertexEffect crvdVE = gameObject.AddComponentIfMissing <CurvedUIVertexEffect>();

            if (tesselate || savedMesh == null || vh == null || (!Application.isPlaying))
            {
                vh = new VertexHelper(TMPsub.mesh);
                ModifyMesh(crvdVE);

                savedMesh = new Mesh();
                vh.FillMesh(savedMesh);
                crvdVE.TesselationRequired = true;
            }
            else if (curve)
            {
                ModifyMesh(crvdVE);
                vh.FillMesh(savedMesh);
                crvdVE.CurvingRequired = true;
            }

            TMPsub.canvasRenderer.SetMesh(savedMesh);
        }
Beispiel #29
0
    protected override void OnPopulateMesh(Mesh m)
    {
        if (isPolygonMissing())
        {
            return;
        }

        using (var vh = new VertexHelper())
        {
            // add vertices
            foreach (var vertex in mapVertices())
            {
                vh.AddVert(new Vector3(vertex.x, vertex.y), color, vertex.Uv);
            }

            // add triangles
            int polygonVerticeStart = 0; // the index where the current polygon has its first vertex
            foreach (var polygon in allVertices)
            {
                polygonVerticeStart = addTriangles(vh, polygon, polygonVerticeStart);
            }

            // draw to mesh
            vh.FillMesh(m);
        }
    }
Beispiel #30
0
        public void Rebuild(CanvasUpdate executing)
        {
            if (executing != CanvasUpdate.PreRender)
            {
                return;
            }

            if (mData == null)
            {
                return;
            }

            Sprite s  = cartoon.sprites[frameIndex];
            var    uv = UnityEngine.Sprites.DataUtility.GetOuterUV(cartoon.sprites[frameIndex]);

            VertexHelper vh = Tools.vertexHelper;

            vh.Clear();
            for (int i = 0; i < mData.Count; ++i)
            {
                mData[i].Gen(vh, uv);
            }

            Mesh workerMesh = SymbolText.WorkerMesh;

            vh.FillMesh(workerMesh);
            canvasRenderer.SetMesh(workerMesh);
            canvasRenderer.SetTexture(s.texture);
        }
Beispiel #31
0
        private void OnFillVBO(Mesh vbo)
        {
            using (var helper = new VertexHelper())
            {
                var inputRect = TextField.rectTransform.rect;
                var extents   = inputRect.size;

                // get the text alignment anchor point for the text in local space
                var textAnchorPivot = UnityEngine.UI.Text.GetTextAnchorPivot(TextField.alignment);
                var refPoint        = Vector2.zero;

                refPoint.x = Mathf.Lerp(inputRect.xMin, inputRect.xMax, textAnchorPivot.x);
                refPoint.y = Mathf.Lerp(inputRect.yMin, inputRect.yMax, textAnchorPivot.y);

                // Adjust the anchor point in screen space
                var roundedRefPoint = TextField.PixelAdjustPoint(refPoint);

                // Determine fraction of pixel to offset text mesh.
                // This is the rounding in screen space, plus the fraction of a pixel the text anchor pivot is from the corner of the text mesh.
                var roundingOffset = roundedRefPoint - refPoint + Vector2.Scale(extents, textAnchorPivot);
                roundingOffset.x = roundingOffset.x - Mathf.Floor(0.5f + roundingOffset.x);
                roundingOffset.y = roundingOffset.y - Mathf.Floor(0.5f + roundingOffset.y);

                GenerateCaret(helper, roundingOffset);

                helper.FillMesh(vbo);
            }
        }
		//
		// Methods
		//
		public override void ModifyMesh (Mesh mesh)
		{
			if (!this.IsActive ())
			{
				return;
			}

            List<UIVertex> verts = new List<UIVertex>();
            using (var helper = new VertexHelper(mesh))
            {
                helper.GetUIVertexStream(verts);
            }

            Text foundtext = GetComponent<Text>();

			float best_fit_adjustment = 1f;

			if (foundtext && foundtext.resizeTextForBestFit)  
			{
				best_fit_adjustment = (float)foundtext.cachedTextGenerator.fontSizeUsedForBestFit / (foundtext.resizeTextMaxSize-1); //max size seems to be exclusive 
			}
			
			int start = 0;
			int count = verts.Count;
			base.ApplyShadowZeroAlloc(verts, base.effectColor, start, verts.Count, base.effectDistance.x*best_fit_adjustment, base.effectDistance.y*best_fit_adjustment);
			start = count;
			count = verts.Count;
			base.ApplyShadowZeroAlloc(verts, base.effectColor, start, verts.Count, base.effectDistance.x*best_fit_adjustment, -base.effectDistance.y*best_fit_adjustment);
			start = count;
			count = verts.Count;
			base.ApplyShadowZeroAlloc(verts, base.effectColor, start, verts.Count, -base.effectDistance.x*best_fit_adjustment, base.effectDistance.y*best_fit_adjustment);
			start = count;
			count = verts.Count;
			base.ApplyShadowZeroAlloc(verts, base.effectColor, start, verts.Count, -base.effectDistance.x*best_fit_adjustment, -base.effectDistance.y*best_fit_adjustment);

            using (var helper = new VertexHelper())
            {
                helper.AddUIVertexTriangleStream(verts);
                helper.FillMesh(mesh);
            }
        }
        protected override void OnPopulateMesh(Mesh m)
        {
            float wHalf = rectTransform.rect.width / 2;
            //float hHalf = rectTransform.rect.height / 2;
            a = Math.Min(1, Math.Max(0, a));
            b = Math.Min(1, Math.Max(0, b));
            c = Math.Min(1, Math.Max(0, c));
            d = Math.Min(1, Math.Max(0, d));

            Color32 color32 = color;
            using (var vh = new VertexHelper())
            {
                vh.AddVert(new Vector3(-wHalf * a, 0), color32, new Vector2(0f, 0f));
                vh.AddVert(new Vector3(0, wHalf * b), color32, new Vector2(0f, 1f));
                vh.AddVert(new Vector3(wHalf * c, 0), color32, new Vector2(1f, 1f));
                vh.AddVert(new Vector3(0, -wHalf * d), color32, new Vector2(1f, 0f));

                vh.AddTriangle(0, 1, 2);
                vh.AddTriangle(2, 3, 0);
                vh.FillMesh(m);
            }
        }
        protected override void OnPopulateMesh(Mesh m)
        {
            var rect = rectTransform.rect;
            var rectNew = rect;

            Color32 color32 = color;
            using (var vh = new VertexHelper()) {
                bool up = cutUL | cutUR;
                bool down = cutLL | cutLR;
                bool left = cutLL | cutUL;
                bool right = cutLR | cutUR;
                bool any = up | down;

                if (any && cornerSize.sqrMagnitude > 0) {
                    //nibble off the sides

                    if (left)
                        rectNew.xMin += cornerSize.x;
                    if (down)
                        rectNew.yMin += cornerSize.y;
                    if (up)
                        rectNew.yMax -= cornerSize.y;
                    if (right)
                        rectNew.xMax -= cornerSize.x;

                    //add two squares to the main square
                    Vector2 ul, ur, ll, lr;

                    if (makeColumns) {
                        ul = new Vector2(rect.xMin, cutUL ? rectNew.yMax : rect.yMax);
                        ur = new Vector2(rect.xMax, cutUR ? rectNew.yMax : rect.yMax);
                        ll = new Vector2(rect.xMin, cutLL ? rectNew.yMin : rect.yMin);
                        lr = new Vector2(rect.xMax, cutLR ? rectNew.yMin : rect.yMin);

                        if (left)
                            AddSquare(
                                ll, ul,
                                new Vector2(rectNew.xMin, rect.yMax),
                                new Vector2(rectNew.xMin, rect.yMin),
                                rect, useColorUp ? colorUp : color32, vh);
                        if (right)
                            AddSquare(
                                ur, lr,
                                new Vector2(rectNew.xMax, rect.yMin),
                                new Vector2(rectNew.xMax, rect.yMax),
                                rect, useColorDown ? colorDown : color32, vh);
                    } else {
                        ul = new Vector2(cutUL ? rectNew.xMin : rect.xMin, rect.yMax);
                        ur = new Vector2(cutUR ? rectNew.xMax : rect.xMax, rect.yMax);
                        ll = new Vector2(cutLL ? rectNew.xMin : rect.xMin, rect.yMin);
                        lr = new Vector2(cutLR ? rectNew.xMax : rect.xMax, rect.yMin);
                        if (down)
                            AddSquare(
                                lr, ll,
                                new Vector2(rect.xMin, rectNew.yMin),
                                new Vector2(rect.xMax, rectNew.yMin),
                                rect, useColorDown ? colorDown : color32, vh);
                        if (up)
                            AddSquare(
                                ul, ur,
                                new Vector2(rect.xMax, rectNew.yMax),
                                new Vector2(rect.xMin, rectNew.yMax),
                                rect, useColorUp ? colorUp : color32, vh);
                    }
                }

                //center
                if (makeColumns)
                    AddSquare(new Rect(rectNew.xMin, rect.yMin, rectNew.width, rect.height), rect, color32, vh);
                else
                    AddSquare(new Rect(rect.xMin, rectNew.yMin, rect.width, rectNew.height), rect, color32, vh);

                vh.FillMesh(m);
            }
        }
        protected override void OnPopulateMesh(Mesh toFill)
        {
            // requires sets of quads
            if (Points == null || Points.Length < 2)
                Points = new[] { new Vector2(0, 0), new Vector2(1, 1) };
            var capSize = 24;
            var sizeX = rectTransform.rect.width;
            var sizeY = rectTransform.rect.height;
            var offsetX = -rectTransform.pivot.x * rectTransform.rect.width;
            var offsetY = -rectTransform.pivot.y * rectTransform.rect.height;

            // don't want to scale based on the size of the rect, so this is switchable now
            if (!relativeSize)
            {
                sizeX = 1;
                sizeY = 1;
            }
            // build a new set of points taking into account the cap sizes.
            // would be cool to support corners too, but that might be a bit tough :)
            var pointList = new List<Vector2>();
            pointList.Add(Points[0]);
            var capPoint = Points[0] + (Points[1] - Points[0]).normalized * capSize;
            pointList.Add(capPoint);

            // should bail before the last point to add another cap point
            for (int i = 1; i < Points.Length - 1; i++)
            {
                pointList.Add(Points[i]);
            }
            capPoint = Points[Points.Length - 1] - (Points[Points.Length - 1] - Points[Points.Length - 2]).normalized * capSize;
            pointList.Add(capPoint);
            pointList.Add(Points[Points.Length - 1]);

            var TempPoints = pointList.ToArray();
            if (UseMargins)
            {
                sizeX -= Margin.x;
                sizeY -= Margin.y;
                offsetX += Margin.x / 2f;
                offsetY += Margin.y / 2f;
            }

            toFill.Clear();
            var vbo = new VertexHelper(toFill);

            Vector2 prevV1 = Vector2.zero;
            Vector2 prevV2 = Vector2.zero;

            for (int i = 1; i < TempPoints.Length; i++)
            {
                var prev = TempPoints[i - 1];
                var cur = TempPoints[i];
                prev = new Vector2(prev.x * sizeX + offsetX, prev.y * sizeY + offsetY);
                cur = new Vector2(cur.x * sizeX + offsetX, cur.y * sizeY + offsetY);

                float angle = Mathf.Atan2(cur.y - prev.y, cur.x - prev.x) * 180f / Mathf.PI;

                var v1 = prev + new Vector2(0, -LineThickness / 2);
                var v2 = prev + new Vector2(0, +LineThickness / 2);
                var v3 = cur + new Vector2(0, +LineThickness / 2);
                var v4 = cur + new Vector2(0, -LineThickness / 2);

                v1 = RotatePointAroundPivot(v1, prev, new Vector3(0, 0, angle));
                v2 = RotatePointAroundPivot(v2, prev, new Vector3(0, 0, angle));
                v3 = RotatePointAroundPivot(v3, cur, new Vector3(0, 0, angle));
                v4 = RotatePointAroundPivot(v4, cur, new Vector3(0, 0, angle));

                Vector2 uvTopLeft = Vector2.zero;
                Vector2 uvBottomLeft = new Vector2(0, 1);

                Vector2 uvTopCenter = new Vector2(0.5f, 0);
                Vector2 uvBottomCenter = new Vector2(0.5f, 1);

                Vector2 uvTopRight = new Vector2(1, 0);
                Vector2 uvBottomRight = new Vector2(1, 1);

                Vector2[] uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomCenter, uvTopCenter };

                if (i > 1)
                    vbo.AddUIVertexQuad(SetVbo(new[] { prevV1, prevV2, v1, v2 }, uvs));

                if (i == 1)
                    uvs = new[] { uvTopLeft, uvBottomLeft, uvBottomCenter, uvTopCenter };
                else if (i == TempPoints.Length - 1)
                    uvs = new[] { uvTopCenter, uvBottomCenter, uvBottomRight, uvTopRight };

                vbo.AddUIVertexQuad(SetVbo(new[] { v1, v2, v3, v4 }, uvs));

                prevV1 = v3;
                prevV2 = v4;
            }

            if (vbo.currentVertCount > 3)
            {
                vbo.FillMesh(toFill);
            }
        }
        /// <summary>
        /// Update the UI renderer mesh.
        /// </summary>
        protected override void OnPopulateMesh(Mesh toFill)
        {
            List<UIVertex> vbo = new List<UIVertex>();
            using (var helper = new VertexHelper(toFill))
            {
                helper.GetUIVertexStream(vbo);
            }

            switch (type)
            {
                case Type.Simple:
                    GenerateSimpleSprite(vbo, m_PreserveAspect);
                    break;
                case Type.Sliced:
                    GenerateSlicedSprite(vbo);
                    break;
                case Type.Tiled:
                    GenerateTiledSprite(vbo);
                    break;
                case Type.Filled:
                    GenerateFilledSprite(vbo, m_PreserveAspect);
                    break;
            }

            using (var helper = new VertexHelper())
            {
                helper.AddUIVertexTriangleStream(vbo);
                helper.FillMesh(toFill);
            }
        }
Beispiel #37
0
        protected override void OnPopulateMesh(Mesh toFill)
        {
            float outer = -rectTransform.pivot.x * rectTransform.rect.width;
            float inner = -rectTransform.pivot.x * rectTransform.rect.width + this.thickness;

            toFill.Clear();
            var vbo = new VertexHelper(toFill);

            Vector2 prevX = Vector2.zero;
            Vector2 prevY = Vector2.zero;
            Vector2 uv0 = new Vector2(0, 0);
            Vector2 uv1 = new Vector2(0, 1);
            Vector2 uv2 = new Vector2(1, 1);
            Vector2 uv3 = new Vector2(1, 0);
            Vector2 pos0;
            Vector2 pos1;
            Vector2 pos2;
            Vector2 pos3;

            float f = (this.fillPercent / 100f);
            float degrees = 360f / segments;
            int fa = (int)((segments + 1) * f);

            for (int i = 0; i < fa; i++)
            {
                float rad = Mathf.Deg2Rad * (i * degrees);
                float c = Mathf.Cos(rad);
                float s = Mathf.Sin(rad);

                uv0 = new Vector2(0, 1);
                uv1 = new Vector2(1, 1);
                uv2 = new Vector2(1, 0);
                uv3 = new Vector2(0, 0);

                pos0 = prevX;
                pos1 = new Vector2(outer * c, outer * s);

                if (fill)
                {
                    pos2 = Vector2.zero;
                    pos3 = Vector2.zero;
                }
                else
                {
                    pos2 = new Vector2(inner * c, inner * s);
                    pos3 = prevY;
                }

                prevX = pos1;
                prevY = pos2;

                vbo.AddUIVertexQuad(SetVbo(new[] { pos0, pos1, pos2, pos3 }, new[] { uv0, uv1, uv2, uv3 }));

            }

            if (vbo.currentVertCount > 3)
            {
                vbo.FillMesh(toFill);
            }
        }