예제 #1
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = spriteSize.x / m_image.pixelsPerUnit;
            float tileHeight     = spriteSize.y / m_image.pixelsPerUnit;
            var   leftTopUV      = Vector2.Min(verts[1].uv0, verts[4].uv0);
            var   rightBottomUV  = Vector2.Max(verts[1].uv0, verts[4].uv0);

            border = new Vector4(leftTopUV.x, leftTopUV.y, rightBottomUV.x, rightBottomUV.y);
            // for (int i = 0; i < shapeCount; ++i)
            {
                var rectBorder = verts[1].position - verts[4].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = IsTileVertical;
                bool bTileHorizontal = IsTileHorizontal;
                for (int j = 0; j < 6; ++j)
                {
                    var index = j;
                    var vert  = verts[index];
                    var uv0   = vert.uv0;
                    //uv0.x = (uv0.x - leftTopUV.x) * rectBorder.x / tileWidth;
                    var uv1 = Vector2.one;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = ((tileHeight == 0 || tileHeight >= rectBorder.y) ? 1f : rectBorder.y / tileHeight);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = ((tileWidth == 0 || tileWidth >= rectBorder.x) ? 1f : rectBorder.x / tileWidth);
                    }
                    vert.uv0     = uv0;
                    vert.uv1     = uv1;
                    verts[index] = vert;
                }
            }
            m_image.material.SetVector("_Border", border);
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
        static StackObject *GetUIVertexStream_14(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj)
        {
            ILRuntime.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain;
            StackObject *ptr_of_this_method;
            StackObject *__ret = ILIntepreter.Minus(__esp, 2);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 1);
            System.Collections.Generic.List <UnityEngine.UIVertex> @stream = (System.Collections.Generic.List <UnityEngine.UIVertex>) typeof(System.Collections.Generic.List <UnityEngine.UIVertex>).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            ptr_of_this_method = ILIntepreter.Minus(__esp, 2);
            UnityEngine.UI.VertexHelper instance_of_this_method = (UnityEngine.UI.VertexHelper) typeof(UnityEngine.UI.VertexHelper).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack));
            __intp.Free(ptr_of_this_method);

            instance_of_this_method.GetUIVertexStream(@stream);

            return(__ret);
        }
        static int _m_GetUIVertexStream(RealStatePtr L)
        {
            ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


            UnityEngine.UI.VertexHelper __cl_gen_to_be_invoked = (UnityEngine.UI.VertexHelper)translator.FastGetCSObj(L, 1);


            try {
                {
                    System.Collections.Generic.List <UnityEngine.UIVertex> stream = (System.Collections.Generic.List <UnityEngine.UIVertex>)translator.GetObject(L, 2, typeof(System.Collections.Generic.List <UnityEngine.UIVertex>));

                    __cl_gen_to_be_invoked.GetUIVertexStream(stream);



                    return(0);
                }
            } catch (System.Exception __gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e));
            }
        }
예제 #4
0
파일: Text.cs 프로젝트: wcsjb/XiaoGame_New
        protected override void OnPopulateMesh(UnityEngine.UI.VertexHelper vh)
        {
            base.OnPopulateMesh(vh);
            var verts = ListPool <UnityEngine.UIVertex> .Get();

            vh.GetUIVertexStream(verts);
            var spriteTagCount = spriteTagList.Count;

            for (int i = 0; i < spriteTagCount; ++i)
            {
                var spriteTag = spriteTagList[i];
                spriteTag.active = true;
                var vertStart = spriteTag.index * 6;
                if (vertStart >= verts.Count)
                {
                    spriteTag.active = false;
                    continue;
                }
                var posLT = verts[vertStart].position;
                var posRB = verts[vertStart + 2].position;
                spriteTag.position = (posLT + posRB) * 0.5f;
                for (int j = 0; j < 6; ++j)
                {
                    int index = spriteTag.index * 6 + j;
                    var vert  = verts[index];
                    vert.uv0     = Vector2.zero;
                    vert.color   = new Color(0, 0, 0, 0);
                    verts[index] = vert;
                }
                spriteTagList[i] = spriteTag;
            }

            spriteTagChanged = true;

            vh.Clear();
            vh.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #5
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            var shapeCount = m_image.fillCenter ? 9 : 8;

            if (count < shapeCount * 6 || m_image.overrideSprite == null)
            {
                return;
            }
            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   border         = overrideSprite.border;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = (spriteSize.x - border.x - border.z) / m_image.pixelsPerUnit;
            float tileHeight     = (spriteSize.y - border.y - border.w) / m_image.pixelsPerUnit;

            for (int i = 0; i < shapeCount; ++i)
            {
                var leftTopUV     = verts[6 * i + 1].uv0;
                var rightBottomUV = verts[6 * i + 4].uv0;
                var rectBorder    = verts[6 * i + 4].position - verts[6 * i + 1].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = m_image.fillCenter ? (IsBorderTileVertical && (i == 1 || i == 7) || IsCenterTileVertical && i == 4) : IsBorderTileVertical && (i == 1 || i == 6);
                bool bTileHorizontal = m_image.fillCenter ? (IsBorderTileHorizontal && (i == 3 || i == 5) || IsCenterTileHorizontal && i == 4) : IsBorderTileHorizontal && (i == 3 || i == 4);
                for (int j = 0; j < 6; ++j)
                {
                    var index = 6 * i + j;
                    var vert  = verts[index];
                    var uv1   = Vector2.zero;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = (tileHeight == 0 ? 0f : rectBorder.y / tileHeight);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = (tileWidth == 0 ? 0f : rectBorder.x / tileWidth);
                    }
                    vert.uv1 = uv1;
                    var tangent = m_image.rectTransform.InverseTransformDirection(leftTopUV.x, leftTopUV.y, rightBottomUV.x);

                    vert.tangent = new Vector4(tangent.x, tangent.y, tangent.z, rightBottomUV.y);
                    if (m_changeBorderColor && !(m_image.fillCenter && i == 4))
                    {
                        vert.color *= m_borderColor;
                    }
                    if (m_changeCenterColor && (m_image.fillCenter && i == 4))
                    {
                        if (j == 0 || j == 5)
                        {
                            vert.color = vert.color * m_customCenterColor[0];
                        }
                        else if (j == 1)
                        {
                            vert.color = vert.color * m_customCenterColor[1];
                        }
                        else if (j == 2 || j == 3)
                        {
                            vert.color = vert.color * m_customCenterColor[2];
                        }
                        else if (j == 4)
                        {
                            vert.color = vert.color * m_customCenterColor[3];
                        }
                    }
                    verts[index] = vert;
                }
            }
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #6
0
        public override void ModifyMesh(UnityEngine.UI.VertexHelper helper)
        {
            var verts = ListPool <UIVertex> .Get();

            if (m_image == null)
            {
                return;
            }
            helper.GetUIVertexStream(verts);
            int count = verts.Count;

            var shapeCount = m_image.fillCenter ? 9 : 8;

            if (count < shapeCount * 6 || m_image.overrideSprite == null)
            {
                return;
            }
            helper.Clear();
            var   overrideSprite = m_image.overrideSprite;
            var   border         = overrideSprite.border;
            var   spriteSize     = overrideSprite.rect.size;
            float tileWidth      = (spriteSize.x - border.x - border.z) / m_image.pixelsPerUnit;
            float tileHeight     = (spriteSize.y - border.y - border.w) / m_image.pixelsPerUnit;

            for (int i = 0; i < shapeCount; ++i)
            {
                var leftTopUV     = verts[6 * i + 1].uv0;
                var rightBottomUV = verts[6 * i + 4].uv0;
                leftTopUV     = new Vector2((int)(leftTopUV.x * 10000), (int)(leftTopUV.y * 10000));
                rightBottomUV = new Vector2((int)(rightBottomUV.x * 10000), (int)(rightBottomUV.y * 10000));
                var rectBorder = verts[6 * i + 4].position - verts[6 * i + 1].position;
                rectBorder = new Vector3(Mathf.Abs(rectBorder.x), Mathf.Abs(rectBorder.y), Mathf.Abs(rectBorder.z));
                bool bTileVertical   = m_image.fillCenter ? (IsBorderTileVertical && (i == 1 || i == 7) || IsCenterTileVertical && i == 4) : IsBorderTileVertical && (i == 1 || i == 6);
                bool bTileHorizontal = m_image.fillCenter ? (IsBorderTileHorizontal && (i == 3 || i == 5) || IsCenterTileHorizontal && i == 4) : IsBorderTileHorizontal && (i == 3 || i == 4);
                for (int j = 0; j < 6; ++j)
                {
                    var index = 6 * i + j;
                    var vert  = verts[index];
                    var uv0   = vert.uv0;
                    var uv1   = Vector2.zero;
                    if (bTileVertical && tileHeight != 0)
                    {
                        uv1.y = ((tileHeight == 0 || tileHeight >= rectBorder.y) ? 1f : tileHeight / rectBorder.y);
                    }
                    if (bTileHorizontal && tileWidth != 0)
                    {
                        uv1.x = ((tileWidth == 0 || tileWidth >= rectBorder.x) ? 1f : tileWidth / rectBorder.x);
                    }
                    uv0     *= 0.5f;
                    uv0.x   += (uv0.x * leftTopUV.x) < 0 ? -leftTopUV.x : leftTopUV.x;
                    uv0.y   += (uv0.y * leftTopUV.y) < 0 ? -leftTopUV.y : leftTopUV.y;
                    uv1     *= 0.5f;
                    uv1.x   += rightBottomUV.x < 0 ? -rightBottomUV.x : rightBottomUV.x;
                    uv1.y   += rightBottomUV.y < 0 ? -rightBottomUV.y : rightBottomUV.y;
                    vert.uv0 = uv0;
                    vert.uv1 = uv1;
                    if (m_changeBorderColor && !(m_image.fillCenter && i == 4))
                    {
                        vert.color *= m_borderColor;
                    }
                    if (m_changeCenterColor && (m_image.fillCenter && i == 4))
                    {
                        if (j == 0 || j == 5)
                        {
                            vert.color = vert.color * m_customCenterColor[0];
                        }
                        else if (j == 1)
                        {
                            vert.color = vert.color * m_customCenterColor[1];
                        }
                        else if (j == 2 || j == 3)
                        {
                            vert.color = vert.color * m_customCenterColor[2];
                        }
                        else if (j == 4)
                        {
                            vert.color = vert.color * m_customCenterColor[3];
                        }
                    }
                    verts[index] = vert;
                }
            }
            helper.Clear();
            helper.AddUIVertexTriangleStream(verts);
            verts.ReleaseToPool();
        }
예제 #7
0
        /// <summary>
        /// Modifies the mesh.
        /// </summary>
        /// <param name="vh">Vertex buffer object.</param>
        public override void ModifyMesh(UnityEngine.UI.VertexHelper vh)
#endif
        {
            if (!IsActive())
            {
                return;
            }
            using (ListPool <UIVertex> .Scope uiVertices = new ListPool <UIVertex> .Scope())
            {
#if IS_VBO_UI_VERTEX
                int count = vertices.Count;
#else
        #if IS_VBO_MESH
                using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper(mesh))
                {
                    vh.GetUIVertexStream(uiVertices.List);
                }
        #else
                vh.GetUIVertexStream(uiVertices.List);
        #endif
                int count = uiVertices.List.Count;
#endif
                if (count == 0)
                {
                    return;
                }
                float yMin = this.graphic.rectTransform.rect.yMin;
                float yMax = this.graphic.rectTransform.rect.yMax;
                switch (m_FillMode)
                {
                case GradientFillMode.PerQuad:
#if IS_VBO_UI_VERTEX
                    for (int i = 0; i < count; i += 4)
                    {
                        ApplyTint(vertices, i, m_TopColor);
                        ApplyTint(vertices, i + 1, m_TopColor);
                        ApplyTint(vertices, i + 2, m_BottomColor);
                        ApplyTint(vertices, i + 3, m_BottomColor);
                    }
#else
                    for (int i = 0; i < count; i += 6)
                    {
                        ApplyTint(uiVertices.List, i, m_TopColor);
                        ApplyTint(uiVertices.List, i + 1, m_TopColor);
                        ApplyTint(uiVertices.List, i + 2, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 3, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 4, m_BottomColor);
                        ApplyTint(uiVertices.List, i + 5, m_TopColor);
                    }
        #if IS_VBO_MESH
                    using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper())
                    {
                        vh.AddUIVertexTriangleStream(uiVertices.List);
                        vh.FillMesh(mesh);
                    }
        #else
                    vh.Clear();
                    vh.AddUIVertexTriangleStream(uiVertices.List);
        #endif
#endif
                    return;

                case GradientFillMode.GeometryBounds:
                    yMin = uiVertices.List[0].position.y;
                    yMax = uiVertices.List[0].position.y;
                    for (int i = 1; i < count; i++)
                    {
                        float y = uiVertices.List[i].position.y;
                        if (y > yMax)
                        {
                            yMax = y;
                        }
                        if (y < yMin)
                        {
                            yMin = y;
                        }
                    }
                    break;
                }
                float div = 1f / (yMax - yMin);
#if IS_VBO_UI_VERTEX
                for (int i = 0; i < count; ++i)
                {
                    ApplyTint(
                        vertices,
                        i,
                        Color32.Lerp(m_TopColor, m_BottomColor, (yMax - uiVertices.List[i].position.y) * div)
                        );
                }
#else
                for (int i = 0; i < count; ++i)
                {
                    ApplyTint(
                        uiVertices.List,
                        i,
                        Color32.Lerp(m_TopColor, m_BottomColor, (yMax - uiVertices.List[i].position.y) * div)
                        );
                }
        #if IS_VBO_MESH
                using (UnityEngine.UI.VertexHelper vh = new UnityEngine.UI.VertexHelper())
                {
                    vh.AddUIVertexTriangleStream(uiVertices.List);
                    vh.FillMesh(mesh);
                }
        #else
                vh.Clear();
                vh.AddUIVertexTriangleStream(uiVertices.List);
        #endif
#endif
            }
        }