Exemplo n.º 1
0
    private static bool RadialCut(Vector2[] xy, Vector2[] uv, float fill, bool invert, int corner)
    {
        if ((double)fill < 0.001)
        {
            return(false);
        }
        if ((corner & 1) == 1)
        {
            invert = !invert;
        }
        if (!invert && (double)fill > 0.999000012874603)
        {
            return(true);
        }
        float num = Mathf.Clamp01(fill);

        if (invert)
        {
            num = 1f - num;
        }
        float f   = num * 1.570796f;
        float cos = Mathf.Cos(f);
        float sin = Mathf.Sin(f);

        Image2.RadialCut(xy, cos, sin, invert, corner);
        Image2.RadialCut(uv, cos, sin, invert, corner);
        return(true);
    }
Exemplo n.º 2
0
    private void GenerateFilledSprite(List <UIVertex> vbo, bool preserveAspect)
    {
        if ((double)base.get_fillAmount() < 0.001)
        {
            return;
        }
        Vector4 drawingDimensions = this.GetDrawingDimensions(preserveAspect, Image2.s_sizeScaling[(int)this.alphaTexLayout]);
        Vector2 zero   = Vector2.zero;
        Vector4 vector = Vector4.zero;

        if (base.get_overrideSprite() != null)
        {
            vector = Image2.GetOuterUV(base.get_overrideSprite(), this.alphaTexLayout, out zero);
        }
        UIVertex simpleVert = UIVertex.simpleVert;

        simpleVert.color = base.get_color();
        float num  = vector.x;
        float num2 = vector.y;
        float num3 = vector.z;
        float num4 = vector.w;

        if (base.get_fillMethod() == null || base.get_fillMethod() == 1)
        {
            if (base.get_fillMethod() == null)
            {
                float num5 = (num3 - num) * base.get_fillAmount();
                if (base.get_fillOrigin() == 1)
                {
                    drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * base.get_fillAmount();
                    num = num3 - num5;
                }
                else
                {
                    drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * base.get_fillAmount();
                    num3 = num + num5;
                }
            }
            else if (base.get_fillMethod() == 1)
            {
                float num6 = (num4 - num2) * base.get_fillAmount();
                if (base.get_fillOrigin() == 1)
                {
                    drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * base.get_fillAmount();
                    num2 = num4 - num6;
                }
                else
                {
                    drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * base.get_fillAmount();
                    num4 = num2 + num6;
                }
            }
        }
        Image2.s_Xy[0] = new Vector2(drawingDimensions.x, drawingDimensions.y);
        Image2.s_Xy[1] = new Vector2(drawingDimensions.x, drawingDimensions.w);
        Image2.s_Xy[2] = new Vector2(drawingDimensions.z, drawingDimensions.w);
        Image2.s_Xy[3] = new Vector2(drawingDimensions.z, drawingDimensions.y);
        Image2.s_Uv[0] = new Vector2(num, num2);
        Image2.s_Uv[1] = new Vector2(num, num4);
        Image2.s_Uv[2] = new Vector2(num3, num4);
        Image2.s_Uv[3] = new Vector2(num3, num2);
        if ((double)base.get_fillAmount() < 1.0)
        {
            if (base.get_fillMethod() == 2)
            {
                if (!Image2.RadialCut(Image2.s_Xy, Image2.s_Uv, base.get_fillAmount(), base.get_fillClockwise(), base.get_fillOrigin()))
                {
                    return;
                }
                for (int i = 0; i < 4; i++)
                {
                    simpleVert.position = Image2.s_Xy[i];
                    simpleVert.uv0      = Image2.s_Uv[i];
                    simpleVert.uv1      = simpleVert.uv0 + zero;
                    vbo.Add(simpleVert);
                }
                return;
            }
            else
            {
                if (base.get_fillMethod() == 3)
                {
                    for (int j = 0; j < 2; j++)
                    {
                        int   num7 = (base.get_fillOrigin() <= 1) ? 0 : 1;
                        float t;
                        float t2;
                        float t3;
                        float t4;
                        if (base.get_fillOrigin() == 0 || base.get_fillOrigin() == 2)
                        {
                            t  = 0f;
                            t2 = 1f;
                            if (j == num7)
                            {
                                t3 = 0f;
                                t4 = 0.5f;
                            }
                            else
                            {
                                t3 = 0.5f;
                                t4 = 1f;
                            }
                        }
                        else
                        {
                            t3 = 0f;
                            t4 = 1f;
                            if (j == num7)
                            {
                                t  = 0.5f;
                                t2 = 1f;
                            }
                            else
                            {
                                t  = 0f;
                                t2 = 0.5f;
                            }
                        }
                        Image2.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t3);
                        Image2.s_Xy[1].x = Image2.s_Xy[0].x;
                        Image2.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t4);
                        Image2.s_Xy[3].x = Image2.s_Xy[2].x;
                        Image2.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t);
                        Image2.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t2);
                        Image2.s_Xy[2].y = Image2.s_Xy[1].y;
                        Image2.s_Xy[3].y = Image2.s_Xy[0].y;
                        Image2.s_Uv[0].x = Mathf.Lerp(num, num3, t3);
                        Image2.s_Uv[1].x = Image2.s_Uv[0].x;
                        Image2.s_Uv[2].x = Mathf.Lerp(num, num3, t4);
                        Image2.s_Uv[3].x = Image2.s_Uv[2].x;
                        Image2.s_Uv[0].y = Mathf.Lerp(num2, num4, t);
                        Image2.s_Uv[1].y = Mathf.Lerp(num2, num4, t2);
                        Image2.s_Uv[2].y = Image2.s_Uv[1].y;
                        Image2.s_Uv[3].y = Image2.s_Uv[0].y;
                        float value = (!base.get_fillClockwise()) ? (base.get_fillAmount() * 2f - (float)(1 - j)) : (base.get_fillAmount() * 2f - (float)j);
                        if (Image2.RadialCut(Image2.s_Xy, Image2.s_Uv, Mathf.Clamp01(value), base.get_fillClockwise(), (j + base.get_fillOrigin() + 3) % 4))
                        {
                            for (int k = 0; k < 4; k++)
                            {
                                simpleVert.position = Image2.s_Xy[k];
                                simpleVert.uv0      = Image2.s_Uv[k];
                                simpleVert.uv1      = simpleVert.uv0 + zero;
                                vbo.Add(simpleVert);
                            }
                        }
                    }
                    return;
                }
                if (base.get_fillMethod() == 4)
                {
                    for (int l = 0; l < 4; l++)
                    {
                        float t5;
                        float t6;
                        if (l < 2)
                        {
                            t5 = 0f;
                            t6 = 0.5f;
                        }
                        else
                        {
                            t5 = 0.5f;
                            t6 = 1f;
                        }
                        float t7;
                        float t8;
                        if (l == 0 || l == 3)
                        {
                            t7 = 0f;
                            t8 = 0.5f;
                        }
                        else
                        {
                            t7 = 0.5f;
                            t8 = 1f;
                        }
                        Image2.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t5);
                        Image2.s_Xy[1].x = Image2.s_Xy[0].x;
                        Image2.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t6);
                        Image2.s_Xy[3].x = Image2.s_Xy[2].x;
                        Image2.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t7);
                        Image2.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t8);
                        Image2.s_Xy[2].y = Image2.s_Xy[1].y;
                        Image2.s_Xy[3].y = Image2.s_Xy[0].y;
                        Image2.s_Uv[0].x = Mathf.Lerp(num, num3, t5);
                        Image2.s_Uv[1].x = Image2.s_Uv[0].x;
                        Image2.s_Uv[2].x = Mathf.Lerp(num, num3, t6);
                        Image2.s_Uv[3].x = Image2.s_Uv[2].x;
                        Image2.s_Uv[0].y = Mathf.Lerp(num2, num4, t7);
                        Image2.s_Uv[1].y = Mathf.Lerp(num2, num4, t8);
                        Image2.s_Uv[2].y = Image2.s_Uv[1].y;
                        Image2.s_Uv[3].y = Image2.s_Uv[0].y;
                        float value2 = (!base.get_fillClockwise()) ? (base.get_fillAmount() * 4f - (float)(3 - (l + base.get_fillOrigin()) % 4)) : (base.get_fillAmount() * 4f - (float)((l + base.get_fillOrigin()) % 4));
                        if (Image2.RadialCut(Image2.s_Xy, Image2.s_Uv, Mathf.Clamp01(value2), base.get_fillClockwise(), (l + 2) % 4))
                        {
                            for (int m = 0; m < 4; m++)
                            {
                                simpleVert.position = Image2.s_Xy[m];
                                simpleVert.uv0      = Image2.s_Uv[m];
                                simpleVert.uv1      = simpleVert.uv0 + zero;
                                vbo.Add(simpleVert);
                            }
                        }
                    }
                    return;
                }
            }
        }
        for (int n = 0; n < 4; n++)
        {
            simpleVert.position = Image2.s_Xy[n];
            simpleVert.uv0      = Image2.s_Uv[n];
            simpleVert.uv1      = simpleVert.uv0 + zero;
            vbo.Add(simpleVert);
        }
    }