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); }
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); }
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); } } }
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); } }