AddQuad() приватный статический Метод

private static AddQuad ( VertexHelper vertexHelper, System.Vector2 posMin, System.Vector2 posMax, Color32 color, System.Vector2 uvMin, System.Vector2 uvMax ) : void
vertexHelper VertexHelper
posMin System.Vector2
posMax System.Vector2
color Color32
uvMin System.Vector2
uvMax System.Vector2
Результат void
Пример #1
0
 private void GenerateSlicedSprite(VertexHelper toFill)
 {
     if (!this.hasBorder)
     {
         this.GenerateSimpleSprite(toFill, false);
     }
     else
     {
         Vector4 vector4_1;
         Vector4 vector4_2;
         Vector4 vector4_3;
         Vector4 vector4_4;
         if ((UnityEngine.Object) this.overrideSprite != (UnityEngine.Object)null)
         {
             vector4_1 = DataUtility.GetOuterUV(this.overrideSprite);
             vector4_2 = DataUtility.GetInnerUV(this.overrideSprite);
             vector4_3 = DataUtility.GetPadding(this.overrideSprite);
             vector4_4 = this.overrideSprite.border;
         }
         else
         {
             vector4_1 = Vector4.zero;
             vector4_2 = Vector4.zero;
             vector4_3 = Vector4.zero;
             vector4_4 = Vector4.zero;
         }
         Rect    pixelAdjustedRect = this.GetPixelAdjustedRect();
         Vector4 adjustedBorders   = this.GetAdjustedBorders(vector4_4 / this.pixelsPerUnit, pixelAdjustedRect);
         Vector4 vector4_5         = vector4_3 / this.pixelsPerUnit;
         Image.s_VertScratch[0]   = new Vector2(vector4_5.x, vector4_5.y);
         Image.s_VertScratch[3]   = new Vector2(pixelAdjustedRect.width - vector4_5.z, pixelAdjustedRect.height - vector4_5.w);
         Image.s_VertScratch[1].x = adjustedBorders.x;
         Image.s_VertScratch[1].y = adjustedBorders.y;
         Image.s_VertScratch[2].x = pixelAdjustedRect.width - adjustedBorders.z;
         Image.s_VertScratch[2].y = pixelAdjustedRect.height - adjustedBorders.w;
         for (int index = 0; index < 4; ++index)
         {
             Image.s_VertScratch[index].x += pixelAdjustedRect.x;
             Image.s_VertScratch[index].y += pixelAdjustedRect.y;
         }
         Image.s_UVScratch[0] = new Vector2(vector4_1.x, vector4_1.y);
         Image.s_UVScratch[1] = new Vector2(vector4_2.x, vector4_2.y);
         Image.s_UVScratch[2] = new Vector2(vector4_2.z, vector4_2.w);
         Image.s_UVScratch[3] = new Vector2(vector4_1.z, vector4_1.w);
         toFill.Clear();
         for (int index1 = 0; index1 < 3; ++index1)
         {
             int index2 = index1 + 1;
             for (int index3 = 0; index3 < 3; ++index3)
             {
                 if (this.m_FillCenter || index1 != 1 || index3 != 1)
                 {
                     int index4 = index3 + 1;
                     Image.AddQuad(toFill, new Vector2(Image.s_VertScratch[index1].x, Image.s_VertScratch[index3].y), new Vector2(Image.s_VertScratch[index2].x, Image.s_VertScratch[index4].y), (Color32)this.color, new Vector2(Image.s_UVScratch[index1].x, Image.s_UVScratch[index3].y), new Vector2(Image.s_UVScratch[index2].x, Image.s_UVScratch[index4].y));
                 }
             }
         }
     }
 }
Пример #2
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);
         }
     }
 }
Пример #3
0
        private void GenerateTiledSprite(VertexHelper toFill)
        {
            Vector4 vector;
            Vector4 vector2;
            Vector4 a;
            Vector2 vector3;

            if (this.activeSprite != null)
            {
                vector  = DataUtility.GetOuterUV(this.activeSprite);
                vector2 = DataUtility.GetInnerUV(this.activeSprite);
                a       = this.activeSprite.border;
                vector3 = this.activeSprite.rect.size;
            }
            else
            {
                vector  = Vector4.zero;
                vector2 = Vector4.zero;
                a       = Vector4.zero;
                vector3 = Vector2.one * 100f;
            }
            Rect  pixelAdjustedRect = base.GetPixelAdjustedRect();
            float num  = (vector3.x - a.x - a.z) / this.pixelsPerUnit;
            float num2 = (vector3.y - a.y - a.w) / this.pixelsPerUnit;

            a = this.GetAdjustedBorders(a / this.pixelsPerUnit, pixelAdjustedRect);
            Vector2 vector4 = new Vector2(vector2.x, vector2.y);
            Vector2 vector5 = new Vector2(vector2.z, vector2.w);
            float   x       = a.x;
            float   num3    = pixelAdjustedRect.width - a.z;
            float   y       = a.y;
            float   num4    = pixelAdjustedRect.height - a.w;

            toFill.Clear();
            Vector2 uvMax = vector5;

            if (num <= 0f)
            {
                num = num3 - x;
            }
            if (num2 <= 0f)
            {
                num2 = num4 - y;
            }
            if (this.activeSprite != null && (this.hasBorder || this.activeSprite.packed || this.activeSprite.texture.wrapMode != TextureWrapMode.Repeat))
            {
                long num5;
                long num6;
                if (this.m_FillCenter)
                {
                    num5 = (long)Math.Ceiling((double)((num3 - x) / num));
                    num6 = (long)Math.Ceiling((double)((num4 - y) / num2));
                    double num7;
                    if (this.hasBorder)
                    {
                        num7 = ((double)num5 + 2.0) * ((double)num6 + 2.0) * 4.0;
                    }
                    else
                    {
                        num7 = (double)(num5 * num6) * 4.0;
                    }
                    if (num7 > 65000.0)
                    {
                        Debug.LogError("Too many sprite tiles on Image \"" + base.name + "\". The tile size will be increased. To remove the limit on the number of tiles, convert the Sprite to an Advanced texture, remove the borders, clear the Packing tag and set the Wrap mode to Repeat.", this);
                        double num8 = 16250.0;
                        double num9;
                        if (this.hasBorder)
                        {
                            num9 = ((double)num5 + 2.0) / ((double)num6 + 2.0);
                        }
                        else
                        {
                            num9 = (double)num5 / (double)num6;
                        }
                        double num10 = Math.Sqrt(num8 / num9);
                        double num11 = num10 * num9;
                        if (this.hasBorder)
                        {
                            num10 -= 2.0;
                            num11 -= 2.0;
                        }
                        num5 = (long)Math.Floor(num10);
                        num6 = (long)Math.Floor(num11);
                        num  = (num3 - x) / (float)num5;
                        num2 = (num4 - y) / (float)num6;
                    }
                }
                else if (this.hasBorder)
                {
                    num5 = (long)Math.Ceiling((double)((num3 - x) / num));
                    num6 = (long)Math.Ceiling((double)((num4 - y) / num2));
                    double num12 = ((double)(num6 + num5) + 2.0) * 2.0 * 4.0;
                    if (num12 > 65000.0)
                    {
                        Debug.LogError("Too many sprite tiles on Image \"" + base.name + "\". The tile size will be increased. To remove the limit on the number of tiles, convert the Sprite to an Advanced texture, remove the borders, clear the Packing tag and set the Wrap mode to Repeat.", this);
                        double num13 = 16250.0;
                        double num14 = (double)num5 / (double)num6;
                        double num15 = (num13 - 4.0) / (2.0 * (1.0 + num14));
                        double d     = num15 * num14;
                        num5 = (long)Math.Floor(num15);
                        num6 = (long)Math.Floor(d);
                        num  = (num3 - x) / (float)num5;
                        num2 = (num4 - y) / (float)num6;
                    }
                }
                else
                {
                    num5 = (num6 = 0L);
                }
                if (this.m_FillCenter)
                {
                    for (long num16 = 0L; num16 < num6; num16 += 1L)
                    {
                        float num17 = y + (float)num16 * num2;
                        float num18 = y + (float)(num16 + 1L) * num2;
                        if (num18 > num4)
                        {
                            uvMax.y = vector4.y + (vector5.y - vector4.y) * (num4 - num17) / (num18 - num17);
                            num18   = num4;
                        }
                        uvMax.x = vector5.x;
                        for (long num19 = 0L; num19 < num5; num19 += 1L)
                        {
                            float num20 = x + (float)num19 * num;
                            float num21 = x + (float)(num19 + 1L) * num;
                            if (num21 > num3)
                            {
                                uvMax.x = vector4.x + (vector5.x - vector4.x) * (num3 - num20) / (num21 - num20);
                                num21   = num3;
                            }
                            Image.AddQuad(toFill, new Vector2(num20, num17) + pixelAdjustedRect.position, new Vector2(num21, num18) + pixelAdjustedRect.position, this.color, vector4, uvMax);
                        }
                    }
                }
                if (this.hasBorder)
                {
                    uvMax = vector5;
                    for (long num22 = 0L; num22 < num6; num22 += 1L)
                    {
                        float num23 = y + (float)num22 * num2;
                        float num24 = y + (float)(num22 + 1L) * num2;
                        if (num24 > num4)
                        {
                            uvMax.y = vector4.y + (vector5.y - vector4.y) * (num4 - num23) / (num24 - num23);
                            num24   = num4;
                        }
                        Image.AddQuad(toFill, new Vector2(0f, num23) + pixelAdjustedRect.position, new Vector2(x, num24) + pixelAdjustedRect.position, this.color, new Vector2(vector.x, vector4.y), new Vector2(vector4.x, uvMax.y));
                        Image.AddQuad(toFill, new Vector2(num3, num23) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, num24) + pixelAdjustedRect.position, this.color, new Vector2(vector5.x, vector4.y), new Vector2(vector.z, uvMax.y));
                    }
                    uvMax = vector5;
                    for (long num25 = 0L; num25 < num5; num25 += 1L)
                    {
                        float num26 = x + (float)num25 * num;
                        float num27 = x + (float)(num25 + 1L) * num;
                        if (num27 > num3)
                        {
                            uvMax.x = vector4.x + (vector5.x - vector4.x) * (num3 - num26) / (num27 - num26);
                            num27   = num3;
                        }
                        Image.AddQuad(toFill, new Vector2(num26, 0f) + pixelAdjustedRect.position, new Vector2(num27, y) + pixelAdjustedRect.position, this.color, new Vector2(vector4.x, vector.y), new Vector2(uvMax.x, vector4.y));
                        Image.AddQuad(toFill, new Vector2(num26, num4) + pixelAdjustedRect.position, new Vector2(num27, pixelAdjustedRect.height) + pixelAdjustedRect.position, this.color, new Vector2(vector4.x, vector5.y), new Vector2(uvMax.x, vector.w));
                    }
                    Image.AddQuad(toFill, new Vector2(0f, 0f) + pixelAdjustedRect.position, new Vector2(x, y) + pixelAdjustedRect.position, this.color, new Vector2(vector.x, vector.y), new Vector2(vector4.x, vector4.y));
                    Image.AddQuad(toFill, new Vector2(num3, 0f) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, y) + pixelAdjustedRect.position, this.color, new Vector2(vector5.x, vector.y), new Vector2(vector.z, vector4.y));
                    Image.AddQuad(toFill, new Vector2(0f, num4) + pixelAdjustedRect.position, new Vector2(x, pixelAdjustedRect.height) + pixelAdjustedRect.position, this.color, new Vector2(vector.x, vector5.y), new Vector2(vector4.x, vector.w));
                    Image.AddQuad(toFill, new Vector2(num3, num4) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, pixelAdjustedRect.height) + pixelAdjustedRect.position, this.color, new Vector2(vector5.x, vector5.y), new Vector2(vector.z, vector.w));
                }
            }
            else
            {
                Vector2 b = new Vector2((num3 - x) / num, (num4 - y) / num2);
                if (this.m_FillCenter)
                {
                    Image.AddQuad(toFill, new Vector2(x, y) + pixelAdjustedRect.position, new Vector2(num3, num4) + pixelAdjustedRect.position, this.color, Vector2.Scale(vector4, b), Vector2.Scale(vector5, b));
                }
            }
        }
Пример #4
0
 private void GenerateSlicedSprite(VertexHelper toFill)
 {
     if (!this.hasBorder)
     {
         this.GenerateSimpleSprite(toFill, false);
     }
     else
     {
         Vector4 vector;
         Vector4 vector2;
         Vector4 a;
         Vector4 a2;
         if (this.activeSprite != null)
         {
             vector  = DataUtility.GetOuterUV(this.activeSprite);
             vector2 = DataUtility.GetInnerUV(this.activeSprite);
             a       = DataUtility.GetPadding(this.activeSprite);
             a2      = this.activeSprite.border;
         }
         else
         {
             vector  = Vector4.zero;
             vector2 = Vector4.zero;
             a       = Vector4.zero;
             a2      = Vector4.zero;
         }
         Rect    pixelAdjustedRect = base.GetPixelAdjustedRect();
         Vector4 adjustedBorders   = this.GetAdjustedBorders(a2 / this.pixelsPerUnit, pixelAdjustedRect);
         a /= this.pixelsPerUnit;
         Image.s_VertScratch[0]   = new Vector2(a.x, a.y);
         Image.s_VertScratch[3]   = new Vector2(pixelAdjustedRect.width - a.z, pixelAdjustedRect.height - a.w);
         Image.s_VertScratch[1].x = adjustedBorders.x;
         Image.s_VertScratch[1].y = adjustedBorders.y;
         Image.s_VertScratch[2].x = pixelAdjustedRect.width - adjustedBorders.z;
         Image.s_VertScratch[2].y = pixelAdjustedRect.height - adjustedBorders.w;
         for (int i = 0; i < 4; i++)
         {
             Vector2[] expr_17E_cp_0 = Image.s_VertScratch;
             int       expr_17E_cp_1 = i;
             expr_17E_cp_0[expr_17E_cp_1].x = expr_17E_cp_0[expr_17E_cp_1].x + pixelAdjustedRect.x;
             Vector2[] expr_19D_cp_0 = Image.s_VertScratch;
             int       expr_19D_cp_1 = i;
             expr_19D_cp_0[expr_19D_cp_1].y = expr_19D_cp_0[expr_19D_cp_1].y + pixelAdjustedRect.y;
         }
         Image.s_UVScratch[0] = new Vector2(vector.x, vector.y);
         Image.s_UVScratch[1] = new Vector2(vector2.x, vector2.y);
         Image.s_UVScratch[2] = new Vector2(vector2.z, vector2.w);
         Image.s_UVScratch[3] = new Vector2(vector.z, vector.w);
         toFill.Clear();
         for (int j = 0; j < 3; j++)
         {
             int num = j + 1;
             for (int k = 0; k < 3; k++)
             {
                 if (this.m_FillCenter || j != 1 || k != 1)
                 {
                     int num2 = k + 1;
                     Image.AddQuad(toFill, new Vector2(Image.s_VertScratch[j].x, Image.s_VertScratch[k].y), new Vector2(Image.s_VertScratch[num].x, Image.s_VertScratch[num2].y), this.color, new Vector2(Image.s_UVScratch[j].x, Image.s_UVScratch[k].y), new Vector2(Image.s_UVScratch[num].x, Image.s_UVScratch[num2].y));
                 }
             }
         }
     }
 }
Пример #5
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);
            }
        }
Пример #6
0
        private void GenerateTiledSprite(VertexHelper toFill)
        {
            Vector4 vector4_1;
            Vector4 vector4_2;
            Vector4 vector4_3;
            Vector2 vector2_1;

            if ((UnityEngine.Object) this.overrideSprite != (UnityEngine.Object)null)
            {
                vector4_1 = DataUtility.GetOuterUV(this.overrideSprite);
                vector4_2 = DataUtility.GetInnerUV(this.overrideSprite);
                vector4_3 = this.overrideSprite.border;
                vector2_1 = this.overrideSprite.rect.size;
            }
            else
            {
                vector4_1 = Vector4.zero;
                vector4_2 = Vector4.zero;
                vector4_3 = Vector4.zero;
                vector2_1 = Vector2.one * 100f;
            }
            Rect  pixelAdjustedRect = this.GetPixelAdjustedRect();
            float num1 = (vector2_1.x - vector4_3.x - vector4_3.z) / this.pixelsPerUnit;
            float num2 = (vector2_1.y - vector4_3.y - vector4_3.w) / this.pixelsPerUnit;

            vector4_3 = this.GetAdjustedBorders(vector4_3 / this.pixelsPerUnit, pixelAdjustedRect);
            Vector2 uvMin     = new Vector2(vector4_2.x, vector4_2.y);
            Vector2 vector2_2 = new Vector2(vector4_2.z, vector4_2.w);

            UIVertex.simpleVert.color = (Color32)this.color;
            float x1 = vector4_3.x;
            float x2 = pixelAdjustedRect.width - vector4_3.z;
            float y1 = vector4_3.y;
            float y2 = pixelAdjustedRect.height - vector4_3.w;

            toFill.Clear();
            Vector2 uvMax = vector2_2;

            if ((double)num1 == 0.0)
            {
                num1 = x2 - x1;
            }
            if ((double)num2 == 0.0)
            {
                num2 = y2 - y1;
            }
            if (this.m_FillCenter)
            {
                float y3 = y1;
                while ((double)y3 < (double)y2)
                {
                    float y4 = y3 + num2;
                    if ((double)y4 > (double)y2)
                    {
                        uvMax.y = uvMin.y + (float)(((double)vector2_2.y - (double)uvMin.y) * ((double)y2 - (double)y3) / ((double)y4 - (double)y3));
                        y4      = y2;
                    }
                    uvMax.x = vector2_2.x;
                    float x3 = x1;
                    while ((double)x3 < (double)x2)
                    {
                        float x4 = x3 + num1;
                        if ((double)x4 > (double)x2)
                        {
                            uvMax.x = uvMin.x + (float)(((double)vector2_2.x - (double)uvMin.x) * ((double)x2 - (double)x3) / ((double)x4 - (double)x3));
                            x4      = x2;
                        }
                        Image.AddQuad(toFill, new Vector2(x3, y3) + pixelAdjustedRect.position, new Vector2(x4, y4) + pixelAdjustedRect.position, (Color32)this.color, uvMin, uvMax);
                        x3 += num1;
                    }
                    y3 += num2;
                }
            }
            if (!this.hasBorder)
            {
                return;
            }
            Vector2 vector2_3 = vector2_2;
            float   y5        = y1;

            while ((double)y5 < (double)y2)
            {
                float y3 = y5 + num2;
                if ((double)y3 > (double)y2)
                {
                    vector2_3.y = uvMin.y + (float)(((double)vector2_2.y - (double)uvMin.y) * ((double)y2 - (double)y5) / ((double)y3 - (double)y5));
                    y3          = y2;
                }
                Image.AddQuad(toFill, new Vector2(0.0f, y5) + pixelAdjustedRect.position, new Vector2(x1, y3) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector4_1.x, uvMin.y), new Vector2(uvMin.x, vector2_3.y));
                Image.AddQuad(toFill, new Vector2(x2, y5) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, y3) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector2_2.x, uvMin.y), new Vector2(vector4_1.z, vector2_3.y));
                y5 += num2;
            }
            vector2_3 = vector2_2;
            float x5 = x1;

            while ((double)x5 < (double)x2)
            {
                float x3 = x5 + num1;
                if ((double)x3 > (double)x2)
                {
                    vector2_3.x = uvMin.x + (float)(((double)vector2_2.x - (double)uvMin.x) * ((double)x2 - (double)x5) / ((double)x3 - (double)x5));
                    x3          = x2;
                }
                Image.AddQuad(toFill, new Vector2(x5, 0.0f) + pixelAdjustedRect.position, new Vector2(x3, y1) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(uvMin.x, vector4_1.y), new Vector2(vector2_3.x, uvMin.y));
                Image.AddQuad(toFill, new Vector2(x5, y2) + pixelAdjustedRect.position, new Vector2(x3, pixelAdjustedRect.height) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(uvMin.x, vector2_2.y), new Vector2(vector2_3.x, vector4_1.w));
                x5 += num1;
            }
            Image.AddQuad(toFill, new Vector2(0.0f, 0.0f) + pixelAdjustedRect.position, new Vector2(x1, y1) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector4_1.x, vector4_1.y), new Vector2(uvMin.x, uvMin.y));
            Image.AddQuad(toFill, new Vector2(x2, 0.0f) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, y1) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector2_2.x, vector4_1.y), new Vector2(vector4_1.z, uvMin.y));
            Image.AddQuad(toFill, new Vector2(0.0f, y2) + pixelAdjustedRect.position, new Vector2(x1, pixelAdjustedRect.height) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector4_1.x, vector2_2.y), new Vector2(uvMin.x, vector4_1.w));
            Image.AddQuad(toFill, new Vector2(x2, y2) + pixelAdjustedRect.position, new Vector2(pixelAdjustedRect.width, pixelAdjustedRect.height) + pixelAdjustedRect.position, (Color32)this.color, new Vector2(vector2_2.x, vector2_2.y), new Vector2(vector4_1.z, vector4_1.w));
        }