protected override void OnPopulateMesh(VertexHelper vh)
        {
            vh.Clear();
            if (sprite == null)
            {
                return;
            }
            var rect         = rectTransform.rect;
            var rectSize     = new Vector2(rect.width, rect.height);
            var size         = new Vector4(0, 0, rectSize.x, rectSize.y);
            var uv           = DataUtility.GetOuterUV(sprite);
            var pivotSize    = Vector2.Dot(rectSize, direction) + spacing;
            var countInteger = Mathf.FloorToInt(count);
            var countFract   = count - countInteger;
            var basePos      = TransformUtility.CheckOffsetBiased(rectTransform, direction, spacing, count);

            for (int e = 0; e < countInteger; ++e)
            {
                var pos = basePos + e * pivotSize * direction;
                MeshUtility.AddSimple(vh, Color.white, pos, size, uv);
            }
            if (countFract > 0)
            {
                var posLast = basePos + countInteger * pivotSize * direction;
#if SCALED_FRACTIONAL
                posLast.x += width * countFract * 0.5f;
                MeshUtility.AddSimple(vh, Color.white, posLast, size * countFract, uv);
#else //clipped factional
                size.z *= countFract;
                uv.z    = uv.x + (uv.z - uv.x) * countFract;
                MeshUtility.AddSimple(vh, Color.white, posLast, size, uv);
#endif
            }
        }
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            vh.Clear();
            if (sprite == null)
            {
                return;
            }
            var rect      = rectTransform.rect;
            var rectSize  = new Vector2(rect.width, rect.height);
            var size      = new Vector4(0, 0, rectSize.x, rectSize.y);
            var uv        = DataUtility.GetOuterUV(sprite);
            var pivotSize = Vector2.Dot(rectSize, direction) + spacing;
            var basePos   = TransformUtility.CheckOffsetBiased(rectTransform, direction, spacing, count);
            int e         = 0;

            for (; e < Mathf.Min(value, count); ++e)
            {
                var pos = basePos + e * pivotSize * direction;
                MeshUtility.AddSimple(vh, Color.white, pos, size, uv);
            }
            if (option == null)
            {
                return;
            }
            uv = DataUtility.GetOuterUV(option);
            for (; e < count; ++e)
            {
                var pos = basePos + e * pivotSize * direction;
                MeshUtility.AddSimple(vh, Color.white, pos, size, uv);
            }
        }
示例#3
0
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            vh.Clear();
            //TODO extend direction
            var     offset = new Vector2(0, 0);
            var     width = 0f;
            var     height = rectTransform.rect.height * 0.5f;
            var     center = TransformUtility.CheckCenter(rectTransform);
            var     centerLocal = center;
            Vector4 uv, uvInner;
            Vector4 rect, border;

            if (middle != null)
            {
                width   = middle.rect.width * 0.5f;
                offset  = new Vector2(width, 0);
                uv      = DataUtility.GetOuterUV(middle);
                uvInner = DataUtility.GetInnerUV(middle);
                rect    = new Vector4(-width, -height, width, height);
                if (uv == uvInner)
                {
                    MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
                }
                else
                {
                    border = middle.border;
                    MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border);
                }
            }
            width = rectTransform.rect.width * 0.5f - width;
            //handle width < 0
            if (mirrored == null || width <= 0)
            {
                return;
            }
            //Debug.Log($"{width}");
            uv      = DataUtility.GetOuterUV(mirrored);
            uvInner = DataUtility.GetInnerUV(mirrored);
            rect    = new Vector4(-width, -height, 0, height);
            if (uv == uvInner)
            {
                centerLocal = center - offset;
                MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
                centerLocal = center + offset;
                rect.x      = -rect.x;
                MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
            }
            else
            {
                border      = mirrored.border;
                centerLocal = center - offset;
                MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border);
                centerLocal = center + offset;
                rect.x      = -rect.x;
                MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, border);
            }
        }
        protected override void OnPopulateMesh(VertexHelper vh)
        {
            vh.Clear();
            //TODO extend direction
            var     offset = new Vector2(0, 0);
            var     width = 0f;
            var     height = rectTransform.rect.height * 0.5f;
            var     center = TransformUtility.CheckCenter(rectTransform);
            var     centerLocal = center;
            Vector4 uv, uvInner;
            Vector4 rect;

            if (middle != null)
            {
                width   = middle.rect.width * 0.5f;
                offset  = new Vector2(width, 0);
                uv      = DataUtility.GetOuterUV(middle);
                uvInner = DataUtility.GetInnerUV(middle);
                rect    = new Vector4(-width, -height, width, height);
                if (uv == uvInner)
                {
                    MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
                }
                else
                {
                    MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, middle.border);
                }
            }
            width       = rectTransform.rect.width * 0.5f - width;
            uv          = DataUtility.GetOuterUV(left);
            uvInner     = DataUtility.GetInnerUV(left);
            rect        = new Vector4(-width, -height, 0, height);
            centerLocal = -offset;
            if (uv == uvInner)
            {
                MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
            }
            else
            {
                MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, left.border);
            }
            uv          = DataUtility.GetOuterUV(right);
            uvInner     = DataUtility.GetInnerUV(right);
            rect        = new Vector4(0, -height, width, height);
            centerLocal = center + offset;
            if (uv == uvInner)
            {
                MeshUtility.AddSimple(vh, color, centerLocal, rect, uv);
            }
            else
            {
                MeshUtility.AddSliced(vh, color, centerLocal, rect, uv, uvInner, right.border);
            }
        }