Exemple #1
0
        private static bool RadialCut(Vector3[] xy, Vector3[] uv, float fill, bool invert, int corner)
        {
            bool result;

            if (fill < 0.001f)
            {
                result = false;
            }
            else
            {
                if ((corner & 1) == 1)
                {
                    invert = !invert;
                }
                if (!invert && fill > 0.999f)
                {
                    result = true;
                }
                else
                {
                    float num = Mathf.Clamp01(fill);
                    if (invert)
                    {
                        num = 1f - num;
                    }
                    num *= 1.57079637f;
                    float cos = Mathf.Cos(num);
                    float sin = Mathf.Sin(num);
                    Image.RadialCut(xy, cos, sin, invert, corner);
                    Image.RadialCut(uv, cos, sin, invert, corner);
                    result = true;
                }
            }
            return(result);
        }
Exemple #2
0
        private static bool RadialCut(Vector3[] xy, Vector3[] uv, float fill, bool invert, int corner)
        {
            if ((double)fill < 1.0 / 1000.0)
            {
                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);

            Image.RadialCut(xy, cos, sin, invert, corner);
            Image.RadialCut(uv, cos, sin, invert, corner);
            return(true);
        }
Exemple #3
0
 private void GenerateFilledSprite(VertexHelper toFill, bool preserveAspect)
 {
     toFill.Clear();
     if (this.m_FillAmount >= 0.001f)
     {
         Vector4  drawingDimensions = this.GetDrawingDimensions(preserveAspect);
         Vector4  vector            = (!(this.activeSprite != null)) ? Vector4.zero : DataUtility.GetOuterUV(this.activeSprite);
         UIVertex simpleVert        = UIVertex.simpleVert;
         simpleVert.color = this.color;
         float num  = vector.x;
         float num2 = vector.y;
         float num3 = vector.z;
         float num4 = vector.w;
         if (this.m_FillMethod == Image.FillMethod.Horizontal || this.m_FillMethod == Image.FillMethod.Vertical)
         {
             if (this.fillMethod == Image.FillMethod.Horizontal)
             {
                 float num5 = (num3 - num) * this.m_FillAmount;
                 if (this.m_FillOrigin == 1)
                 {
                     drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * this.m_FillAmount;
                     num = num3 - num5;
                 }
                 else
                 {
                     drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * this.m_FillAmount;
                     num3 = num + num5;
                 }
             }
             else if (this.fillMethod == Image.FillMethod.Vertical)
             {
                 float num6 = (num4 - num2) * this.m_FillAmount;
                 if (this.m_FillOrigin == 1)
                 {
                     drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * this.m_FillAmount;
                     num2 = num4 - num6;
                 }
                 else
                 {
                     drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * this.m_FillAmount;
                     num4 = num2 + num6;
                 }
             }
         }
         Image.s_Xy[0] = new Vector2(drawingDimensions.x, drawingDimensions.y);
         Image.s_Xy[1] = new Vector2(drawingDimensions.x, drawingDimensions.w);
         Image.s_Xy[2] = new Vector2(drawingDimensions.z, drawingDimensions.w);
         Image.s_Xy[3] = new Vector2(drawingDimensions.z, drawingDimensions.y);
         Image.s_Uv[0] = new Vector2(num, num2);
         Image.s_Uv[1] = new Vector2(num, num4);
         Image.s_Uv[2] = new Vector2(num3, num4);
         Image.s_Uv[3] = new Vector2(num3, num2);
         if (this.m_FillAmount < 1f && this.m_FillMethod != Image.FillMethod.Horizontal && this.m_FillMethod != Image.FillMethod.Vertical)
         {
             if (this.fillMethod == Image.FillMethod.Radial90)
             {
                 if (Image.RadialCut(Image.s_Xy, Image.s_Uv, this.m_FillAmount, this.m_FillClockwise, this.m_FillOrigin))
                 {
                     Image.AddQuad(toFill, Image.s_Xy, this.color, Image.s_Uv);
                 }
             }
             else if (this.fillMethod == Image.FillMethod.Radial180)
             {
                 for (int i = 0; i < 2; i++)
                 {
                     int   num7 = (this.m_FillOrigin <= 1) ? 0 : 1;
                     float t;
                     float t2;
                     float t3;
                     float t4;
                     if (this.m_FillOrigin == 0 || this.m_FillOrigin == 2)
                     {
                         t  = 0f;
                         t2 = 1f;
                         if (i == num7)
                         {
                             t3 = 0f;
                             t4 = 0.5f;
                         }
                         else
                         {
                             t3 = 0.5f;
                             t4 = 1f;
                         }
                     }
                     else
                     {
                         t3 = 0f;
                         t4 = 1f;
                         if (i == num7)
                         {
                             t  = 0.5f;
                             t2 = 1f;
                         }
                         else
                         {
                             t  = 0f;
                             t2 = 0.5f;
                         }
                     }
                     Image.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t3);
                     Image.s_Xy[1].x = Image.s_Xy[0].x;
                     Image.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t4);
                     Image.s_Xy[3].x = Image.s_Xy[2].x;
                     Image.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t);
                     Image.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t2);
                     Image.s_Xy[2].y = Image.s_Xy[1].y;
                     Image.s_Xy[3].y = Image.s_Xy[0].y;
                     Image.s_Uv[0].x = Mathf.Lerp(num, num3, t3);
                     Image.s_Uv[1].x = Image.s_Uv[0].x;
                     Image.s_Uv[2].x = Mathf.Lerp(num, num3, t4);
                     Image.s_Uv[3].x = Image.s_Uv[2].x;
                     Image.s_Uv[0].y = Mathf.Lerp(num2, num4, t);
                     Image.s_Uv[1].y = Mathf.Lerp(num2, num4, t2);
                     Image.s_Uv[2].y = Image.s_Uv[1].y;
                     Image.s_Uv[3].y = Image.s_Uv[0].y;
                     float value = (!this.m_FillClockwise) ? (this.m_FillAmount * 2f - (float)(1 - i)) : (this.fillAmount * 2f - (float)i);
                     if (Image.RadialCut(Image.s_Xy, Image.s_Uv, Mathf.Clamp01(value), this.m_FillClockwise, (i + this.m_FillOrigin + 3) % 4))
                     {
                         Image.AddQuad(toFill, Image.s_Xy, this.color, Image.s_Uv);
                     }
                 }
             }
             else if (this.fillMethod == Image.FillMethod.Radial360)
             {
                 for (int j = 0; j < 4; j++)
                 {
                     float t5;
                     float t6;
                     if (j < 2)
                     {
                         t5 = 0f;
                         t6 = 0.5f;
                     }
                     else
                     {
                         t5 = 0.5f;
                         t6 = 1f;
                     }
                     float t7;
                     float t8;
                     if (j == 0 || j == 3)
                     {
                         t7 = 0f;
                         t8 = 0.5f;
                     }
                     else
                     {
                         t7 = 0.5f;
                         t8 = 1f;
                     }
                     Image.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t5);
                     Image.s_Xy[1].x = Image.s_Xy[0].x;
                     Image.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t6);
                     Image.s_Xy[3].x = Image.s_Xy[2].x;
                     Image.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t7);
                     Image.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t8);
                     Image.s_Xy[2].y = Image.s_Xy[1].y;
                     Image.s_Xy[3].y = Image.s_Xy[0].y;
                     Image.s_Uv[0].x = Mathf.Lerp(num, num3, t5);
                     Image.s_Uv[1].x = Image.s_Uv[0].x;
                     Image.s_Uv[2].x = Mathf.Lerp(num, num3, t6);
                     Image.s_Uv[3].x = Image.s_Uv[2].x;
                     Image.s_Uv[0].y = Mathf.Lerp(num2, num4, t7);
                     Image.s_Uv[1].y = Mathf.Lerp(num2, num4, t8);
                     Image.s_Uv[2].y = Image.s_Uv[1].y;
                     Image.s_Uv[3].y = Image.s_Uv[0].y;
                     float value2 = (!this.m_FillClockwise) ? (this.m_FillAmount * 4f - (float)(3 - (j + this.m_FillOrigin) % 4)) : (this.m_FillAmount * 4f - (float)((j + this.m_FillOrigin) % 4));
                     if (Image.RadialCut(Image.s_Xy, Image.s_Uv, Mathf.Clamp01(value2), this.m_FillClockwise, (j + 2) % 4))
                     {
                         Image.AddQuad(toFill, Image.s_Xy, this.color, Image.s_Uv);
                     }
                 }
             }
         }
         else
         {
             Image.AddQuad(toFill, Image.s_Xy, this.color, Image.s_Uv);
         }
     }
 }
Exemple #4
0
        private void GenerateFilledSprite(VertexHelper toFill, bool preserveAspect)
        {
            toFill.Clear();
            if ((double)this.m_FillAmount < 1.0 / 1000.0)
            {
                return;
            }
            Vector4 drawingDimensions = this.GetDrawingDimensions(preserveAspect);
            Vector4 vector4           = !((UnityEngine.Object) this.overrideSprite != (UnityEngine.Object)null) ? Vector4.zero : DataUtility.GetOuterUV(this.overrideSprite);

            UIVertex.simpleVert.color = (Color32)this.color;
            float num1 = vector4.x;
            float num2 = vector4.y;
            float num3 = vector4.z;
            float num4 = vector4.w;

            if (this.m_FillMethod == Image.FillMethod.Horizontal || this.m_FillMethod == Image.FillMethod.Vertical)
            {
                if (this.fillMethod == Image.FillMethod.Horizontal)
                {
                    float num5 = (num3 - num1) * this.m_FillAmount;
                    if (this.m_FillOrigin == 1)
                    {
                        drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * this.m_FillAmount;
                        num1 = num3 - num5;
                    }
                    else
                    {
                        drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * this.m_FillAmount;
                        num3 = num1 + num5;
                    }
                }
                else if (this.fillMethod == Image.FillMethod.Vertical)
                {
                    float num5 = (num4 - num2) * this.m_FillAmount;
                    if (this.m_FillOrigin == 1)
                    {
                        drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * this.m_FillAmount;
                        num2 = num4 - num5;
                    }
                    else
                    {
                        drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * this.m_FillAmount;
                        num4 = num2 + num5;
                    }
                }
            }
            Image.s_Xy[0] = (Vector3) new Vector2(drawingDimensions.x, drawingDimensions.y);
            Image.s_Xy[1] = (Vector3) new Vector2(drawingDimensions.x, drawingDimensions.w);
            Image.s_Xy[2] = (Vector3) new Vector2(drawingDimensions.z, drawingDimensions.w);
            Image.s_Xy[3] = (Vector3) new Vector2(drawingDimensions.z, drawingDimensions.y);
            Image.s_Uv[0] = (Vector3) new Vector2(num1, num2);
            Image.s_Uv[1] = (Vector3) new Vector2(num1, num4);
            Image.s_Uv[2] = (Vector3) new Vector2(num3, num4);
            Image.s_Uv[3] = (Vector3) new Vector2(num3, num2);
            if ((double)this.m_FillAmount < 1.0 && this.m_FillMethod != Image.FillMethod.Horizontal && this.m_FillMethod != Image.FillMethod.Vertical)
            {
                if (this.fillMethod == Image.FillMethod.Radial90)
                {
                    if (!Image.RadialCut(Image.s_Xy, Image.s_Uv, this.m_FillAmount, this.m_FillClockwise, this.m_FillOrigin))
                    {
                        return;
                    }
                    Image.AddQuad(toFill, Image.s_Xy, (Color32)this.color, Image.s_Uv);
                }
                else if (this.fillMethod == Image.FillMethod.Radial180)
                {
                    for (int index = 0; index < 2; ++index)
                    {
                        int   num5 = this.m_FillOrigin <= 1 ? 0 : 1;
                        float t1;
                        float t2;
                        float t3;
                        float t4;
                        if (this.m_FillOrigin == 0 || this.m_FillOrigin == 2)
                        {
                            t1 = 0.0f;
                            t2 = 1f;
                            if (index == num5)
                            {
                                t3 = 0.0f;
                                t4 = 0.5f;
                            }
                            else
                            {
                                t3 = 0.5f;
                                t4 = 1f;
                            }
                        }
                        else
                        {
                            t3 = 0.0f;
                            t4 = 1f;
                            if (index == num5)
                            {
                                t1 = 0.5f;
                                t2 = 1f;
                            }
                            else
                            {
                                t1 = 0.0f;
                                t2 = 0.5f;
                            }
                        }
                        Image.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t3);
                        Image.s_Xy[1].x = Image.s_Xy[0].x;
                        Image.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t4);
                        Image.s_Xy[3].x = Image.s_Xy[2].x;
                        Image.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t1);
                        Image.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t2);
                        Image.s_Xy[2].y = Image.s_Xy[1].y;
                        Image.s_Xy[3].y = Image.s_Xy[0].y;
                        Image.s_Uv[0].x = Mathf.Lerp(num1, num3, t3);
                        Image.s_Uv[1].x = Image.s_Uv[0].x;
                        Image.s_Uv[2].x = Mathf.Lerp(num1, num3, t4);
                        Image.s_Uv[3].x = Image.s_Uv[2].x;
                        Image.s_Uv[0].y = Mathf.Lerp(num2, num4, t1);
                        Image.s_Uv[1].y = Mathf.Lerp(num2, num4, t2);
                        Image.s_Uv[2].y = Image.s_Uv[1].y;
                        Image.s_Uv[3].y = Image.s_Uv[0].y;
                        float num6 = !this.m_FillClockwise ? this.m_FillAmount * 2f - (float)(1 - index) : this.fillAmount * 2f - (float)index;
                        if (Image.RadialCut(Image.s_Xy, Image.s_Uv, Mathf.Clamp01(num6), this.m_FillClockwise, (index + this.m_FillOrigin + 3) % 4))
                        {
                            Image.AddQuad(toFill, Image.s_Xy, (Color32)this.color, Image.s_Uv);
                        }
                    }
                }
                else
                {
                    if (this.fillMethod != Image.FillMethod.Radial360)
                    {
                        return;
                    }
                    for (int index = 0; index < 4; ++index)
                    {
                        float t1;
                        float t2;
                        if (index < 2)
                        {
                            t1 = 0.0f;
                            t2 = 0.5f;
                        }
                        else
                        {
                            t1 = 0.5f;
                            t2 = 1f;
                        }
                        float t3;
                        float t4;
                        if (index == 0 || index == 3)
                        {
                            t3 = 0.0f;
                            t4 = 0.5f;
                        }
                        else
                        {
                            t3 = 0.5f;
                            t4 = 1f;
                        }
                        Image.s_Xy[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t1);
                        Image.s_Xy[1].x = Image.s_Xy[0].x;
                        Image.s_Xy[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t2);
                        Image.s_Xy[3].x = Image.s_Xy[2].x;
                        Image.s_Xy[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t3);
                        Image.s_Xy[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t4);
                        Image.s_Xy[2].y = Image.s_Xy[1].y;
                        Image.s_Xy[3].y = Image.s_Xy[0].y;
                        Image.s_Uv[0].x = Mathf.Lerp(num1, num3, t1);
                        Image.s_Uv[1].x = Image.s_Uv[0].x;
                        Image.s_Uv[2].x = Mathf.Lerp(num1, num3, t2);
                        Image.s_Uv[3].x = Image.s_Uv[2].x;
                        Image.s_Uv[0].y = Mathf.Lerp(num2, num4, t3);
                        Image.s_Uv[1].y = Mathf.Lerp(num2, num4, t4);
                        Image.s_Uv[2].y = Image.s_Uv[1].y;
                        Image.s_Uv[3].y = Image.s_Uv[0].y;
                        float num5 = !this.m_FillClockwise ? this.m_FillAmount * 4f - (float)(3 - (index + this.m_FillOrigin) % 4) : this.m_FillAmount * 4f - (float)((index + this.m_FillOrigin) % 4);
                        if (Image.RadialCut(Image.s_Xy, Image.s_Uv, Mathf.Clamp01(num5), this.m_FillClockwise, (index + 2) % 4))
                        {
                            Image.AddQuad(toFill, Image.s_Xy, (Color32)this.color, Image.s_Uv);
                        }
                    }
                }
            }
            else
            {
                Image.AddQuad(toFill, Image.s_Xy, (Color32)this.color, Image.s_Uv);
            }
        }