RepeatIndex() 개인적인 메소드

private RepeatIndex ( int val, int max ) : int
val int
max int
리턴 int
예제 #1
0
 private void Update()
 {
     if (this.frames == null || this.frames.Length == 0)
     {
         base.enabled = false;
     }
     else
     {
         if (this.framerate != 0)
         {
             float num = (!this.ignoreTimeScale) ? Time.time : RealTime.time;
             if (this.mUpdate < num)
             {
                 this.mUpdate = num;
                 int num2 = (this.framerate <= 0) ? (this.mIndex - 1) : (this.mIndex + 1);
                 if (!this.loop && (num2 < 0 || num2 >= this.frames.Length))
                 {
                     base.enabled = false;
                     return;
                 }
                 this.mIndex = NGUIMath.RepeatIndex(num2, this.frames.Length);
                 this.UpdateSprite();
             }
         }
     }
 }
예제 #2
0
    public static unsafe float DistanceToRectangle(Vector2[] screenPoints, Vector2 mousePos)
    {
        bool flag = false;
        int  val  = 4;

        for (int i = 0; i < 5; i++)
        {
            Vector3 vector  = screenPoints[NGUIMath.RepeatIndex(i, 4)];
            Vector3 vector2 = screenPoints[NGUIMath.RepeatIndex(val, 4)];
            if (((vector.y > mousePos.y) != (vector2.y > mousePos.y)) && (mousePos.x < ((((vector2.x - vector.x) * (mousePos.y - vector.y)) / (vector2.y - vector.y)) + vector.x)))
            {
                flag = !flag;
            }
            val = i;
        }
        if (flag)
        {
            return(0f);
        }
        float num4 = -1f;

        for (int j = 0; j < 4; j++)
        {
            Vector3 a    = screenPoints[j];
            Vector3 b    = screenPoints[NGUIMath.RepeatIndex(j + 1, 4)];
            float   num3 = DistancePointToLineSegment(mousePos, a, b);
            if ((num3 < num4) || (num4 < 0f))
            {
                num4 = num3;
            }
        }
        return(num4);
    }
예제 #3
0
    /// <summary>
    /// Add a border around the sprite that copies the pixels from the opposite side, making it possible for the sprite to tile without seams.
    /// </summary>

    void AddTiledBorder(UISpriteData sprite)
    {
        List <UIAtlasMaker.SpriteEntry> sprites = new List <UIAtlasMaker.SpriteEntry>();

        UIAtlasMaker.ExtractSprites(mAtlas, sprites);
        UIAtlasMaker.SpriteEntry se = null;

        for (int i = 0; i < sprites.Count; ++i)
        {
            if (sprites[i].name == sprite.name)
            {
                se = sprites[i];
                break;
            }
        }

        if (se != null)
        {
            int w1 = se.tex.width - se.borderLeft - se.borderRight;
            int h1 = se.tex.height - se.borderBottom - se.borderTop;

            int w2 = se.tex.width + 2;
            int h2 = se.tex.height + 2;

            Color32[] c1 = se.tex.GetPixels32();
            Color32[] c2 = new Color32[w2 * h2];

            for (int y2 = 0; y2 < h2; ++y2)
            {
                int y1 = se.borderBottom + NGUIMath.RepeatIndex(y2 - se.borderBottom - 1, h1);

                for (int x2 = 0; x2 < w2; ++x2)
                {
                    int x1 = se.borderLeft + NGUIMath.RepeatIndex(x2 - se.borderLeft - 1, w1);
                    c2[x2 + y2 * w2] = c1[x1 + y1 * se.tex.width];
                }
            }

            if (se.temporaryTexture)
            {
                DestroyImmediate(se.tex);
            }

            ++se.borderLeft;
            ++se.borderRight;
            ++se.borderTop;
            ++se.borderBottom;

            se.tex      = new Texture2D(w2, h2);
            se.tex.name = sprite.name;
            se.tex.SetPixels32(c2);
            se.tex.Apply();
            se.temporaryTexture = true;

            UIAtlasMaker.UpdateAtlas(mAtlas, sprites);

            DestroyImmediate(se.tex);
            se.tex = null;
        }
    }
예제 #4
0
    /// <summary>
    /// Advance the animation as necessary.
    /// </summary>

    void Update()
    {
        if (frames == null || frames.Length == 0)
        {
            Destroy(gameObject);
        }
        else if (framerate != 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                int newIndex = framerate > 0 ? mIndex + 1 : mIndex - 1;

                if (!loop && (newIndex < 0 || newIndex >= frames.Length))
                {
                    Destroy(gameObject);
                    return;
                }

                mIndex = NGUIMath.RepeatIndex(newIndex, frames.Length);
                UpdateSprite();
            }
        }
    }
예제 #5
0
 static public int RepeatIndex_s(IntPtr l)
 {
     try {
                     #if DEBUG
         var    method     = System.Reflection.MethodBase.GetCurrentMethod();
         string methodName = GetMethodName(method);
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.BeginSample(methodName);
                     #else
         Profiler.BeginSample(methodName);
                     #endif
                     #endif
         System.Int32 a1;
         checkType(l, 1, out a1);
         System.Int32 a2;
         checkType(l, 2, out a2);
         var ret = NGUIMath.RepeatIndex(a1, a2);
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
             #if DEBUG
     finally {
                     #if UNITY_5_5_OR_NEWER
         UnityEngine.Profiling.Profiler.EndSample();
                     #else
         Profiler.EndSample();
                     #endif
     }
             #endif
 }
예제 #6
0
 private void Update()
 {
     if (frames == null || frames.Length == 0)
     {
         base.enabled = false;
     }
     else
     {
         if (framerate == 0)
         {
             return;
         }
         float num = (!ignoreTimeScale) ? Time.time : RealTime.time;
         if (mUpdate < num)
         {
             mUpdate = num;
             int num2 = (framerate <= 0) ? (mIndex - 1) : (mIndex + 1);
             if (!loop && (num2 < 0 || num2 >= frames.Length))
             {
                 base.enabled = false;
                 return;
             }
             mIndex = NGUIMath.RepeatIndex(num2, frames.Length);
             UpdateSprite();
         }
     }
 }
    /// <summary>
    /// Advance the animation as necessary.
    /// </summary>

    void Update()
    {
        if (animations == null || animations.Length == 0 || animations[currentAnimation].frames.Length == 0)
        {
            enabled = false;
        }
        else if (framerate != 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                int newIndex = framerate > 0 ? mIndex + 1 : mIndex - 1;

                if (!animations[currentAnimation].loop && (newIndex < 0 || newIndex >= animations[currentAnimation].frames.Length))
                {
                    enabled = false;
                    return;
                }

                mIndex = NGUIMath.RepeatIndex(newIndex, animations[currentAnimation].frames.Length);
                UpdateSprite();
            }
        }
    }
 private void Update()
 {
     if (frames == null || frames.Length == 0)
     {
         this.set_enabled(false);
     }
     else if (framerate != 0)
     {
         float num = (!ignoreTimeScale) ? Time.get_time() : RealTime.time;
         if (mUpdate < num)
         {
             mUpdate = num;
             int num2 = (framerate <= 0) ? (mIndex - 1) : (mIndex + 1);
             if (!loop && (num2 < 0 || num2 >= frames.Length))
             {
                 this.set_enabled(false);
             }
             else
             {
                 mIndex = NGUIMath.RepeatIndex(num2, frames.Length);
                 UpdateSprite();
             }
         }
     }
 }
예제 #9
0
    void Update()
    {
        if (framerate != 0 && frames != null && frames.Length > 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                if (isLoop)
                {
                    mIndex = NGUIMath.RepeatIndex(framerate > 0 ? mIndex + 1 : mIndex - 1, frames.Length);
                }
                else
                {
                    mIndex = (mIndex + 1) >= frames.Length ? mIndex : mIndex + 1;
                }
                mUpdate = time + Mathf.Abs(1f / framerate);

                if (mUnitySprite != null)
                {
                    mUnitySprite.sprite = frames[mIndex];
                }
                else if (mNguiSprite != null)
                {
                    mNguiSprite.nextSprite = frames[mIndex];
                }
            }
        }
    }
예제 #10
0
파일: NGUIMath.cs 프로젝트: yxxyws/niuniu
    public static float DistanceToRectangle(Vector2[] screenPoints, Vector2 mousePos)
    {
        bool flag = false;
        int  val  = 4;

        for (int i = 0; i < 5; i++)
        {
            Vector3 vector  = screenPoints[NGUIMath.RepeatIndex(i, 4)];
            Vector3 vector2 = screenPoints[NGUIMath.RepeatIndex(val, 4)];
            if (vector.y > mousePos.y != vector2.y > mousePos.y && mousePos.x < (vector2.x - vector.x) * (mousePos.y - vector.y) / (vector2.y - vector.y) + vector.x)
            {
                flag = !flag;
            }
            val = i;
        }
        if (!flag)
        {
            float num = -1f;
            for (int j = 0; j < 4; j++)
            {
                Vector3 v    = screenPoints[j];
                Vector3 v2   = screenPoints[NGUIMath.RepeatIndex(j + 1, 4)];
                float   num2 = NGUIMath.DistancePointToLineSegment(mousePos, v, v2);
                if (num2 < num || num < 0f)
                {
                    num = num2;
                }
            }
            return(num);
        }
        return(0f);
    }
    /// <summary>
    /// Advance the animation as necessary.
    /// </summary>

    void Update()
    {
        if (frames == null || frames.Length == 0)
        {
            enabled = false;
        }
        else if (framerate != 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                int newIndex = framerate > 0 ? frameIndex + 1 : frameIndex - 1;

                if (!loop && (newIndex < 0 || newIndex >= frames.Length))
                {
                    enabled = false;
                    return;
                }

                frameIndex = NGUIMath.RepeatIndex(newIndex, frames.Length);
                UpdateSprite();
            }
        }
    }
예제 #12
0
 static public int RepeatIndex_s(IntPtr l)
 {
     try {
         System.Int32 a1;
         checkType(l, 1, out a1);
         System.Int32 a2;
         checkType(l, 2, out a2);
         var ret = NGUIMath.RepeatIndex(a1, a2);
         pushValue(l, true);
         pushValue(l, ret);
         return(2);
     }
     catch (Exception e) {
         return(error(l, e));
     }
 }
예제 #13
0
 static public int RepeatIndex_s(IntPtr l)
 {
     try {
         System.Int32 a1;
         checkType(l, 1, out a1);
         System.Int32 a2;
         checkType(l, 2, out a2);
         var ret = NGUIMath.RepeatIndex(a1, a2);
         pushValue(l, ret);
         return(1);
     }
     catch (Exception e) {
         LuaDLL.luaL_error(l, e.ToString());
         return(0);
     }
 }
예제 #14
0
    /// <summary>
    /// Advance the animation as necessary.
    /// </summary>

    void Update()
    {
        if (frames == null || frames.Length == 0)
        {
            enabled = false;
        }
        else if (framerate != 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                int newIndex = framerate > 0 ? frameIndex + 1 : frameIndex - 1;

                if (newIndex == _iFrameIndex_Event)
                {
                    _OnMatchFrameIndex();
                    _OnMatchFrameIndex = null;
                    _iFrameIndex_Event = -1;
                }

                if (!loop && (newIndex < 0 || newIndex >= frames.Length))
                {
                    enabled = false;
                    if (p_EVENT_OnEndAnim != null)
                    {
                        p_EVENT_OnEndAnim();
                    }

                    if (_OnFinishAnim != null)
                    {
                        _OnFinishAnim();
                        _OnFinishAnim = null;
                    }

                    return;
                }

                frameIndex = NGUIMath.RepeatIndex(newIndex, frames.Length);
                UpdateSprite();
            }
        }
    }
예제 #15
0
    /// <summary>
    /// Determine the distance from the mouse position to the screen space rectangle specified by the 4 points.
    /// </summary>

    static public float DistanceToRectangle(Vector2[] screenPoints, Vector2 mousePos)
    {
        bool oddNodes = false;
        int  j        = 4;

        for (int i = 0; i < 5; i++)
        {
            Vector3 v0 = screenPoints[NGUIMath.RepeatIndex(i, 4)];
            Vector3 v1 = screenPoints[NGUIMath.RepeatIndex(j, 4)];

            if ((v0.y > mousePos.y) != (v1.y > mousePos.y))
            {
                if (mousePos.x < (v1.x - v0.x) * (mousePos.y - v0.y) / (v1.y - v0.y) + v0.x)
                {
                    oddNodes = !oddNodes;
                }
            }
            j = i;
        }

        if (!oddNodes)
        {
            float dist, closestDist = -1f;

            for (int i = 0; i < 4; i++)
            {
                Vector3 v0 = screenPoints[i];
                Vector3 v1 = screenPoints[NGUIMath.RepeatIndex(i + 1, 4)];

                dist = DistancePointToLineSegment(mousePos, v0, v1);

                if (dist < closestDist || closestDist < 0f)
                {
                    closestDist = dist;
                }
            }
            return(closestDist);
        }
        else
        {
            return(0f);
        }
    }
예제 #16
0
    // Update is called once per frame
    void Update()
    {
        if (framerate != 0 && frames != null && frames.Count > 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;
                mIndex  = NGUIMath.RepeatIndex(framerate > 0 ? mIndex + 1 : mIndex - 1, frames.Count);
                mUpdate = time + Mathf.Abs(1f / framerate);

                if (sprite != null)
                {
                    sprite.mainTexture = frames[mIndex];
                }
            }
        }
    }
예제 #17
0
 private void Update()
 {
     if (this.framerate != 0 && this.frames != null && this.frames.Length > 0)
     {
         float num = (!this.ignoreTimeScale) ? Time.time : RealTime.time;
         if (this.mUpdate < num)
         {
             this.mUpdate = num;
             this.mIndex  = NGUIMath.RepeatIndex((this.framerate <= 0) ? (this.mIndex - 1) : (this.mIndex + 1), this.frames.Length);
             this.mUpdate = num + Mathf.Abs(1f / (float)this.framerate);
             if (this.mUnitySprite != null)
             {
                 this.mUnitySprite.sprite = this.frames[this.mIndex];
             }
             else if (this.mNguiSprite != null)
             {
                 this.mNguiSprite.nextSprite = this.frames[this.mIndex];
             }
         }
     }
 }
예제 #18
0
    private void Update()
    {
        if (framerate == 0 || frames == null || frames.Length <= 0)
        {
            return;
        }
        float num = (ignoreTimeScale ? RealTime.time : Time.time);

        if (mUpdate < num)
        {
            mUpdate = num;
            mIndex  = NGUIMath.RepeatIndex((framerate > 0) ? (mIndex + 1) : (mIndex - 1), frames.Length);
            mUpdate = num + Mathf.Abs(1f / (float)framerate);
            if (mUnitySprite != null)
            {
                mUnitySprite.sprite = frames[mIndex];
            }
            else if (mNguiSprite != null)
            {
                mNguiSprite.nextSprite = frames[mIndex];
            }
        }
    }
예제 #19
0
    /// <summary>
    /// Adjust the specified quad, making it be radially filled instead.
    /// </summary>

    static void RadialCut(Vector2[] xy, float cos, float sin, bool invert, int corner)
    {
        var i0 = corner;
        var i1 = NGUIMath.RepeatIndex(corner + 1, 4);
        var i2 = NGUIMath.RepeatIndex(corner + 2, 4);
        var i3 = NGUIMath.RepeatIndex(corner + 3, 4);

        if ((corner & 1) == 1)
        {
            if (sin > cos)
            {
                cos /= sin;
                sin  = 1f;

                if (invert)
                {
                    xy[i1].x = Mathf.Lerp(xy[i0].x, xy[i2].x, cos);
                    xy[i2].x = xy[i1].x;
                }
            }
            else if (cos > sin)
            {
                sin /= cos;
                cos  = 1f;

                if (!invert)
                {
                    xy[i2].y = Mathf.Lerp(xy[i0].y, xy[i2].y, sin);
                    xy[i3].y = xy[i2].y;
                }
            }
            else
            {
                cos = 1f;
                sin = 1f;
            }

            if (!invert)
            {
                xy[i3].x = Mathf.Lerp(xy[i0].x, xy[i2].x, cos);
            }
            else
            {
                xy[i1].y = Mathf.Lerp(xy[i0].y, xy[i2].y, sin);
            }
        }
        else
        {
            if (cos > sin)
            {
                sin /= cos;
                cos  = 1f;

                if (!invert)
                {
                    xy[i1].y = Mathf.Lerp(xy[i0].y, xy[i2].y, sin);
                    xy[i2].y = xy[i1].y;
                }
            }
            else if (sin > cos)
            {
                cos /= sin;
                sin  = 1f;

                if (invert)
                {
                    xy[i2].x = Mathf.Lerp(xy[i0].x, xy[i2].x, cos);
                    xy[i3].x = xy[i2].x;
                }
            }
            else
            {
                cos = 1f;
                sin = 1f;
            }

            if (invert)
            {
                xy[i3].y = Mathf.Lerp(xy[i0].y, xy[i2].y, sin);
            }
            else
            {
                xy[i1].x = Mathf.Lerp(xy[i0].x, xy[i2].x, cos);
            }
        }
    }
예제 #20
0
    /// <summary>
    /// Filled sprite fill function.
    /// </summary>

    void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
    {
        if (mFillAmount < 0.001f)
        {
            return;
        }

        Vector4 v = drawingDimensions;
        Vector4 u = drawingUVs;
        Color32 c = drawingColor;

        // Horizontal and vertical filled sprites are simple -- just end the sprite prematurely
        if (mFillDirection == FillDirection.Horizontal || mFillDirection == FillDirection.Vertical)
        {
            if (mFillDirection == FillDirection.Horizontal)
            {
                float fill = (u.z - u.x) * mFillAmount;

                if (mInvert)
                {
                    v.x = v.z - (v.z - v.x) * mFillAmount;
                    u.x = u.z - fill;
                }
                else
                {
                    v.z = v.x + (v.z - v.x) * mFillAmount;
                    u.z = u.x + fill;
                }
            }
            else if (mFillDirection == FillDirection.Vertical)
            {
                float fill = (u.w - u.y) * mFillAmount;

                if (mInvert)
                {
                    v.y = v.w - (v.w - v.y) * mFillAmount;
                    u.y = u.w - fill;
                }
                else
                {
                    v.w = v.y + (v.w - v.y) * mFillAmount;
                    u.w = u.y + fill;
                }
            }
        }

        mTempPos[0] = new Vector2(v.x, v.y);
        mTempPos[1] = new Vector2(v.x, v.w);
        mTempPos[2] = new Vector2(v.z, v.w);
        mTempPos[3] = new Vector2(v.z, v.y);

        mTempUVs[0] = new Vector2(u.x, u.y);
        mTempUVs[1] = new Vector2(u.x, u.w);
        mTempUVs[2] = new Vector2(u.z, u.w);
        mTempUVs[3] = new Vector2(u.z, u.y);

        if (mFillAmount < 1f)
        {
            if (mFillDirection == FillDirection.Radial90)
            {
                if (RadialCut(mTempPos, mTempUVs, mFillAmount, mInvert, 0))
                {
                    for (int i = 0; i < 4; ++i)
                    {
                        verts.Add(mTempPos[i]);
                        uvs.Add(mTempUVs[i]);
                        cols.Add(c);
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial180)
            {
                for (int side = 0; side < 2; ++side)
                {
                    float fx0, fx1, fy0, fy1;

                    fy0 = 0f;
                    fy1 = 1f;

                    if (side == 0)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(u.x, u.z, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(u.x, u.z, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(u.y, u.w, fy0);
                    mTempUVs[1].y = Mathf.Lerp(u.y, u.w, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = !mInvert ? fillAmount * 2f - side : mFillAmount * 2f - (1 - side);

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), !mInvert, NGUIMath.RepeatIndex(side + 3, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(c);
                        }
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial360)
            {
                for (int corner = 0; corner < 4; ++corner)
                {
                    float fx0, fx1, fy0, fy1;

                    if (corner < 2)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    if (corner == 0 || corner == 3)
                    {
                        fy0 = 0f; fy1 = 0.5f;
                    }
                    else
                    {
                        fy0 = 0.5f; fy1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(u.x, u.z, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(u.x, u.z, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(u.y, u.w, fy0);
                    mTempUVs[1].y = Mathf.Lerp(u.y, u.w, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = mInvert ?
                                mFillAmount * 4f - NGUIMath.RepeatIndex(corner + 2, 4) :
                                mFillAmount * 4f - (3 - NGUIMath.RepeatIndex(corner + 2, 4));

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), mInvert, NGUIMath.RepeatIndex(corner + 2, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(c);
                        }
                    }
                }
                return;
            }
        }

        // Fill the buffer with the quad for the sprite
        for (int i = 0; i < 4; ++i)
        {
            verts.Add(mTempPos[i]);
            uvs.Add(mTempUVs[i]);
            cols.Add(c);
        }
    }
예제 #21
0
    void Update()
    {
        if (framerate != 0 && frames != null && frames.Length > 0)
        {
            float time = ignoreTimeScale ? RealTime.time : Time.time;

            if (mUpdate < time)
            {
                mUpdate = time;

                if (this.RepeatAnimation && !this.PingPongBack)
                {
                    mIndex = NGUIMath.RepeatIndex(framerate > 0 ? mIndex + 1 : mIndex - 1, frames.Length);
                }
                else if (!this.RepeatAnimation && !this.PingPongBack)
                {
                    mIndex = Mathf.Min(frames.Length - 1, mIndex + 1);
                }
                else if (this.RepeatAnimation && this.PingPongBack)
                {
                    if (!this.goingBackwards)
                    {
                        mIndex++;
                        if (mIndex >= frames.Length - 1)
                        {
                            // Next time go backwards
                            this.goingBackwards = true;
                        }
                    }
                    else
                    {
                        mIndex--;
                        if (mIndex <= 0)
                        {
                            // Go forward next time
                            this.goingBackwards = false;
                        }
                    }

                    // Make sure it doesn't go out of bounds
                    mIndex = Mathf.Min(frames.Length - 1, Mathf.Max(0, mIndex));
                }
                else if (!this.RepeatAnimation && this.PingPongBack)
                {
                    if (!this.goingBackwards)
                    {
                        mIndex++;
                        if (mIndex >= frames.Length - 1)
                        {
                            // Next time go backwards
                            this.goingBackwards = true;
                        }
                    }
                    else
                    {
                        if (mIndex > 0)
                        {
                            mIndex--;
                        }
                    }

                    // Make sure it doesn't go out of bounds
                    mIndex = Mathf.Min(frames.Length - 1, Mathf.Max(0, mIndex));
                }

                mUpdate = time + Mathf.Abs(1f / framerate);

                if (mUnitySprite != null)
                {
                    mUnitySprite.sprite = frames[mIndex];
                }
                else if (mNguiSprite != null)
                {
                    mNguiSprite.nextSprite = frames[mIndex];
                }

                if (mIndex == 0 || mIndex == frames.Length - 1)
                {
                    this.AnimationEnded = true;
                    if (this.DisableAfterEnded)
                    {
                        this.gameObject.SetActive(false);
                    }
                }
                else
                {
                    this.AnimationEnded = false;
                }
            }
        }
    }
예제 #22
0
    /// <summary>
    /// Filled sprite fill function.
    /// </summary>

    void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
    {
        if (mFillAmount < 0.001f)
        {
            return;
        }

        Vector4 v = drawingDimensions;
        Vector4 u = drawingUVs;
        Color32 c = drawingColor;

        // Horizontal and vertical filled sprites are simple -- just end the sprite prematurely
        if (mFillDirection == FillDirection.Horizontal || mFillDirection == FillDirection.Vertical)
        {
            if (mFillDirection == FillDirection.Horizontal)
            {
                float fill = (u.z - u.x) * mFillAmount;

                if (mInvert)
                {
                    v.x = v.z - (v.z - v.x) * mFillAmount;
                    u.x = u.z - fill;
                }
                else
                {
                    v.z = v.x + (v.z - v.x) * mFillAmount;
                    u.z = u.x + fill;
                }
            }
            else if (mFillDirection == FillDirection.Vertical)
            {
                float fill = (u.w - u.y) * mFillAmount;

                if (mInvert)
                {
                    v.y = v.w - (v.w - v.y) * mFillAmount;
                    u.y = u.w - fill;
                }
                else
                {
                    v.w = v.y + (v.w - v.y) * mFillAmount;
                    u.w = u.y + fill;
                }
            }
        }

        mTempPos[0] = new Vector2(v.x, v.y);
        mTempPos[1] = new Vector2(v.x, v.w);
        mTempPos[2] = new Vector2(v.z, v.w);
        mTempPos[3] = new Vector2(v.z, v.y);

        mTempUVs[0] = new Vector2(u.x, u.y);
        mTempUVs[1] = new Vector2(u.x, u.w);
        mTempUVs[2] = new Vector2(u.z, u.w);
        mTempUVs[3] = new Vector2(u.z, u.y);

        if (mFillAmount < 1f)
        {
            if (mFillDirection == FillDirection.Radial90)
            {
                if (RadialCut(mTempPos, mTempUVs, mFillAmount, mInvert, 0))
                {
                    for (int i = 0; i < 4; ++i)
                    {
                        verts.Add(mTempPos[i]);
                        uvs.Add(mTempUVs[i]);
                        cols.Add(c);
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial180)
            {
                for (int side = 0; side < 2; ++side)
                {
                    float fx0, fx1, fy0, fy1;

                    fy0 = 0f;
                    fy1 = 1f;

                    if (side == 0)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(u.x, u.z, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(u.x, u.z, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(u.y, u.w, fy0);
                    mTempUVs[1].y = Mathf.Lerp(u.y, u.w, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = !mInvert ? fillAmount * 2f - side : mFillAmount * 2f - (1 - side);

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), !mInvert, NGUIMath.RepeatIndex(side + 3, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(c);
                        }
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial360)
            {
                for (int corner = 0; corner < 4; ++corner)
                {
                    float fx0, fx1, fy0, fy1;

                    if (corner < 2)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    if (corner == 0 || corner == 3)
                    {
                        fy0 = 0f; fy1 = 0.5f;
                    }
                    else
                    {
                        fy0 = 0.5f; fy1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(u.x, u.z, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(u.x, u.z, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(u.y, u.w, fy0);
                    mTempUVs[1].y = Mathf.Lerp(u.y, u.w, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = mInvert ?
                                mFillAmount * 4f - NGUIMath.RepeatIndex(corner + 2, 4) :
                                mFillAmount * 4f - (3 - NGUIMath.RepeatIndex(corner + 2, 4));

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), mInvert, NGUIMath.RepeatIndex(corner + 2, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(c);
                        }
                    }
                }
                return;
            }
        }

        // @TODO 增加CutCorner //
        if (mFillDirection == FillDirection.CutCorner)
        {
            Vector3[] tempPos = new Vector3[36];
            Vector2[] tempUv  = new Vector2[36];

            float widthDivThree    = (drawingDimensions.z - drawingDimensions.x) / 3;
            float heightDivThree   = (drawingDimensions.w - drawingDimensions.y) / 3;
            float uvWidthDivThree  = (drawingUVs.z - drawingUVs.x) / 3;
            float uvHeightDivThree = (drawingUVs.w - drawingUVs.y) / 3;

            // column //
            for (int i = 0; i < 3; i++)
            {
                // row //
                for (int j = 0; j < 3; j++)
                {
                    tempPos[(i + j * 3) * 4 + 0].x = drawingDimensions.x + i * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 1].x = drawingDimensions.x + (i + 1) * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 2].x = drawingDimensions.x + (i + 1) * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 3].x = drawingDimensions.x + i * widthDivThree;

                    tempPos[(i + j * 3) * 4 + 0].y = drawingDimensions.w - j * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 1].y = drawingDimensions.w - j * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 2].y = drawingDimensions.w - (j + 1) * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 3].y = drawingDimensions.w - (j + 1) * heightDivThree;


                    tempUv[(i + j * 3) * 4 + 0].x = drawingUVs.x + i * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 1].x = drawingUVs.x + (i + 1) * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 2].x = drawingUVs.x + (i + 1) * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 3].x = drawingUVs.x + i * uvWidthDivThree;

                    tempUv[(i + j * 3) * 4 + 0].y = drawingUVs.w - j * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 1].y = drawingUVs.w - j * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 2].y = drawingUVs.w - (j + 1) * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 3].y = drawingUVs.w - (j + 1) * uvHeightDivThree;
                }
            }

            if (!invert)
            {
                tempPos[0]  = tempPos[1];
                tempUv[0]   = tempUv[1];
                tempPos[34] = tempPos[35];
                tempUv[34]  = tempUv[35];
            }
            else
            {
                tempPos[9]  = tempPos[8];
                tempUv[9]   = tempUv[8];
                tempPos[27] = tempPos[26];
                tempUv[27]  = tempUv[26];
            }

            for (int i = 0; i < 36; i++)
            {
                verts.Add(tempPos[i]);
                uvs.Add(tempUv[i]);
                cols.Add(c);
            }

            return;
        }

        // 增加圆形 //
        if (mFillDirection == FillDirection.Circle)
        {
            Vector3[] tempPos = new Vector3[36];
            Vector2[] tempUv  = new Vector2[36];

            float widthDivThree    = (drawingDimensions.z - drawingDimensions.x) / 3;
            float heightDivThree   = (drawingDimensions.w - drawingDimensions.y) / 3;
            float uvWidthDivThree  = (drawingUVs.z - drawingUVs.x) / 3;
            float uvHeightDivThree = (drawingUVs.w - drawingUVs.y) / 3;

            // column //
            for (int i = 0; i < 3; i++)
            {
                // row //
                for (int j = 0; j < 3; j++)
                {
                    tempPos[(i + j * 3) * 4 + 0].x = drawingDimensions.x + i * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 1].x = drawingDimensions.x + (i + 1) * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 2].x = drawingDimensions.x + (i + 1) * widthDivThree;
                    tempPos[(i + j * 3) * 4 + 3].x = drawingDimensions.x + i * widthDivThree;

                    tempPos[(i + j * 3) * 4 + 0].y = drawingDimensions.w - j * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 1].y = drawingDimensions.w - j * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 2].y = drawingDimensions.w - (j + 1) * heightDivThree;
                    tempPos[(i + j * 3) * 4 + 3].y = drawingDimensions.w - (j + 1) * heightDivThree;


                    tempUv[(i + j * 3) * 4 + 0].x = drawingUVs.x + i * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 1].x = drawingUVs.x + (i + 1) * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 2].x = drawingUVs.x + (i + 1) * uvWidthDivThree;
                    tempUv[(i + j * 3) * 4 + 3].x = drawingUVs.x + i * uvWidthDivThree;

                    tempUv[(i + j * 3) * 4 + 0].y = drawingUVs.w - j * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 1].y = drawingUVs.w - j * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 2].y = drawingUVs.w - (j + 1) * uvHeightDivThree;
                    tempUv[(i + j * 3) * 4 + 3].y = drawingUVs.w - (j + 1) * uvHeightDivThree;
                }
            }

            tempPos[0]  = tempPos[1];
            tempUv[0]   = tempUv[1];
            tempPos[34] = tempPos[35];
            tempUv[34]  = tempUv[35];
            tempPos[9]  = tempPos[8];
            tempUv[9]   = tempUv[8];
            tempPos[27] = tempPos[26];
            tempUv[27]  = tempUv[26];

            for (int i = 0; i < 36; i++)
            {
                verts.Add(tempPos[i]);
                uvs.Add(tempUv[i]);
                cols.Add(c);
            }

            return;
        }

        // Fill the buffer with the quad for the sprite
        for (int i = 0; i < 4; ++i)
        {
            verts.Add(mTempPos[i]);
            uvs.Add(mTempUVs[i]);
            cols.Add(c);
        }
    }
예제 #23
0
 public unsafe static long $Invoke32(long instance, long *args)
 {
     return(GCHandledObjects.ObjectToGCHandle(NGUIMath.RepeatIndex(*(int *)args, *(int *)(args + 1))));
 }
예제 #24
0
    protected void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
    {
        if (this.mFillAmount < 0.001f)
        {
            return;
        }
        Color color = base.color;

        color.a = this.finalAlpha;
        Color32 item = (!this.atlas.premultipliedAlpha) ? color : NGUITools.ApplyPMA(color);
        Vector4 drawingDimensions = this.drawingDimensions;
        Vector4 drawingUVs        = this.drawingUVs;

        if (this.mFillDirection == UISprite.FillDirection.Horizontal || this.mFillDirection == UISprite.FillDirection.Vertical)
        {
            if (this.mFillDirection == UISprite.FillDirection.Horizontal)
            {
                float num = (drawingUVs.z - drawingUVs.x) * this.mFillAmount;
                if (this.mInvert)
                {
                    drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * this.mFillAmount;
                    drawingUVs.x        = drawingUVs.z - num;
                }
                else
                {
                    drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * this.mFillAmount;
                    drawingUVs.z        = drawingUVs.x + num;
                }
            }
            else if (this.mFillDirection == UISprite.FillDirection.Vertical)
            {
                float num2 = (drawingUVs.w - drawingUVs.y) * this.mFillAmount;
                if (this.mInvert)
                {
                    drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * this.mFillAmount;
                    drawingUVs.y        = drawingUVs.w - num2;
                }
                else
                {
                    drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * this.mFillAmount;
                    drawingUVs.w        = drawingUVs.y + num2;
                }
            }
        }
        UISprite.mTempPos[0] = new Vector2(drawingDimensions.x, drawingDimensions.y);
        UISprite.mTempPos[1] = new Vector2(drawingDimensions.x, drawingDimensions.w);
        UISprite.mTempPos[2] = new Vector2(drawingDimensions.z, drawingDimensions.w);
        UISprite.mTempPos[3] = new Vector2(drawingDimensions.z, drawingDimensions.y);
        UISprite.mTempUVs[0] = new Vector2(drawingUVs.x, drawingUVs.y);
        UISprite.mTempUVs[1] = new Vector2(drawingUVs.x, drawingUVs.w);
        UISprite.mTempUVs[2] = new Vector2(drawingUVs.z, drawingUVs.w);
        UISprite.mTempUVs[3] = new Vector2(drawingUVs.z, drawingUVs.y);
        if (this.mFillAmount < 1f)
        {
            if (this.mFillDirection == UISprite.FillDirection.Radial90)
            {
                if (UISprite.RadialCut(UISprite.mTempPos, UISprite.mTempUVs, this.mFillAmount, this.mInvert, 0))
                {
                    for (int i = 0; i < 4; i++)
                    {
                        verts.Add(UISprite.mTempPos[i]);
                        uvs.Add(UISprite.mTempUVs[i]);
                        cols.Add(item);
                    }
                }
                return;
            }
            if (this.mFillDirection == UISprite.FillDirection.Radial180)
            {
                for (int j = 0; j < 2; j++)
                {
                    float t  = 0f;
                    float t2 = 1f;
                    float t3;
                    float t4;
                    if (j == 0)
                    {
                        t3 = 0f;
                        t4 = 0.5f;
                    }
                    else
                    {
                        t3 = 0.5f;
                        t4 = 1f;
                    }
                    UISprite.mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t3);
                    UISprite.mTempPos[1].x = UISprite.mTempPos[0].x;
                    UISprite.mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t4);
                    UISprite.mTempPos[3].x = UISprite.mTempPos[2].x;
                    UISprite.mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t);
                    UISprite.mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t2);
                    UISprite.mTempPos[2].y = UISprite.mTempPos[1].y;
                    UISprite.mTempPos[3].y = UISprite.mTempPos[0].y;
                    UISprite.mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t3);
                    UISprite.mTempUVs[1].x = UISprite.mTempUVs[0].x;
                    UISprite.mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t4);
                    UISprite.mTempUVs[3].x = UISprite.mTempUVs[2].x;
                    UISprite.mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t);
                    UISprite.mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t2);
                    UISprite.mTempUVs[2].y = UISprite.mTempUVs[1].y;
                    UISprite.mTempUVs[3].y = UISprite.mTempUVs[0].y;
                    float value = this.mInvert ? (this.mFillAmount * 2f - (float)(1 - j)) : (this.fillAmount * 2f - (float)j);
                    if (UISprite.RadialCut(UISprite.mTempPos, UISprite.mTempUVs, Mathf.Clamp01(value), !this.mInvert, NGUIMath.RepeatIndex(j + 3, 4)))
                    {
                        for (int k = 0; k < 4; k++)
                        {
                            verts.Add(UISprite.mTempPos[k]);
                            uvs.Add(UISprite.mTempUVs[k]);
                            cols.Add(item);
                        }
                    }
                }
                return;
            }
            if (this.mFillDirection == UISprite.FillDirection.Radial360)
            {
                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;
                    }
                    UISprite.mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t5);
                    UISprite.mTempPos[1].x = UISprite.mTempPos[0].x;
                    UISprite.mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t6);
                    UISprite.mTempPos[3].x = UISprite.mTempPos[2].x;
                    UISprite.mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t7);
                    UISprite.mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t8);
                    UISprite.mTempPos[2].y = UISprite.mTempPos[1].y;
                    UISprite.mTempPos[3].y = UISprite.mTempPos[0].y;
                    UISprite.mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t5);
                    UISprite.mTempUVs[1].x = UISprite.mTempUVs[0].x;
                    UISprite.mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t6);
                    UISprite.mTempUVs[3].x = UISprite.mTempUVs[2].x;
                    UISprite.mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t7);
                    UISprite.mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t8);
                    UISprite.mTempUVs[2].y = UISprite.mTempUVs[1].y;
                    UISprite.mTempUVs[3].y = UISprite.mTempUVs[0].y;
                    float value2 = (!this.mInvert) ? (this.mFillAmount * 4f - (float)(3 - NGUIMath.RepeatIndex(l + 2, 4))) : (this.mFillAmount * 4f - (float)NGUIMath.RepeatIndex(l + 2, 4));
                    if (UISprite.RadialCut(UISprite.mTempPos, UISprite.mTempUVs, Mathf.Clamp01(value2), this.mInvert, NGUIMath.RepeatIndex(l + 2, 4)))
                    {
                        for (int m = 0; m < 4; m++)
                        {
                            verts.Add(UISprite.mTempPos[m]);
                            uvs.Add(UISprite.mTempUVs[m]);
                            cols.Add(item);
                        }
                    }
                }
                return;
            }
        }
        for (int n = 0; n < 4; n++)
        {
            verts.Add(UISprite.mTempPos[n]);
            uvs.Add(UISprite.mTempUVs[n]);
            cols.Add(item);
        }
    }
예제 #25
0
    /// <summary>
    /// Filled sprite fill function.
    /// </summary>

    protected void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
    {
        if (mFillAmount < 0.001f)
        {
            return;
        }

        Color colF = color;

        colF.a = finalAlpha;
        Color32 col = atlas.premultipliedAlpha ? NGUITools.ApplyPMA(colF) : colF;
        Vector4 v   = drawingDimensions;

        float tx0 = mOuterUV.xMin;
        float ty0 = mOuterUV.yMin;
        float tx1 = mOuterUV.xMax;
        float ty1 = mOuterUV.yMax;

        // Horizontal and vertical filled sprites are simple -- just end the sprite prematurely
        if (mFillDirection == FillDirection.Horizontal || mFillDirection == FillDirection.Vertical)
        {
            if (mFillDirection == FillDirection.Horizontal)
            {
                float fill = (tx1 - tx0) * mFillAmount;

                if (mInvert)
                {
                    v.x = v.z - (v.z - v.x) * mFillAmount;
                    tx0 = tx1 - fill;
                }
                else
                {
                    v.z = v.x + (v.z - v.x) * mFillAmount;
                    tx1 = tx0 + fill;
                }
            }
            else if (mFillDirection == FillDirection.Vertical)
            {
                float fill = (ty1 - ty0) * mFillAmount;

                if (mInvert)
                {
                    v.y = v.w - (v.w - v.y) * mFillAmount;
                    ty0 = ty1 - fill;
                }
                else
                {
                    v.w = v.y + (v.w - v.y) * mFillAmount;
                    ty1 = ty0 + fill;
                }
            }
        }

        mTempPos[0] = new Vector2(v.x, v.y);
        mTempPos[1] = new Vector2(v.x, v.w);
        mTempPos[2] = new Vector2(v.z, v.w);
        mTempPos[3] = new Vector2(v.z, v.y);

        mTempUVs[0] = new Vector2(tx0, ty0);
        mTempUVs[1] = new Vector2(tx0, ty1);
        mTempUVs[2] = new Vector2(tx1, ty1);
        mTempUVs[3] = new Vector2(tx1, ty0);

        if (mFillAmount < 1f)
        {
            if (mFillDirection == FillDirection.Radial90)
            {
                if (RadialCut(mTempPos, mTempUVs, mFillAmount, mInvert, 0))
                {
                    for (int i = 0; i < 4; ++i)
                    {
                        verts.Add(mTempPos[i]);
                        uvs.Add(mTempUVs[i]);
                        cols.Add(col);
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial180)
            {
                for (int side = 0; side < 2; ++side)
                {
                    float fx0, fx1, fy0, fy1;

                    fy0 = 0f;
                    fy1 = 1f;

                    if (side == 0)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(tx0, tx1, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(tx0, tx1, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(ty0, ty1, fy0);
                    mTempUVs[1].y = Mathf.Lerp(ty0, ty1, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = !mInvert ? fillAmount * 2f - side : mFillAmount * 2f - (1 - side);

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), !mInvert, NGUIMath.RepeatIndex(side + 3, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(col);
                        }
                    }
                }
                return;
            }

            if (mFillDirection == FillDirection.Radial360)
            {
                for (int corner = 0; corner < 4; ++corner)
                {
                    float fx0, fx1, fy0, fy1;

                    if (corner < 2)
                    {
                        fx0 = 0f; fx1 = 0.5f;
                    }
                    else
                    {
                        fx0 = 0.5f; fx1 = 1f;
                    }

                    if (corner == 0 || corner == 3)
                    {
                        fy0 = 0f; fy1 = 0.5f;
                    }
                    else
                    {
                        fy0 = 0.5f; fy1 = 1f;
                    }

                    mTempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
                    mTempPos[1].x = mTempPos[0].x;
                    mTempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
                    mTempPos[3].x = mTempPos[2].x;

                    mTempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
                    mTempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
                    mTempPos[2].y = mTempPos[1].y;
                    mTempPos[3].y = mTempPos[0].y;

                    mTempUVs[0].x = Mathf.Lerp(tx0, tx1, fx0);
                    mTempUVs[1].x = mTempUVs[0].x;
                    mTempUVs[2].x = Mathf.Lerp(tx0, tx1, fx1);
                    mTempUVs[3].x = mTempUVs[2].x;

                    mTempUVs[0].y = Mathf.Lerp(ty0, ty1, fy0);
                    mTempUVs[1].y = Mathf.Lerp(ty0, ty1, fy1);
                    mTempUVs[2].y = mTempUVs[1].y;
                    mTempUVs[3].y = mTempUVs[0].y;

                    float val = mInvert ?
                                mFillAmount * 4f - NGUIMath.RepeatIndex(corner + 2, 4) :
                                mFillAmount * 4f - (3 - NGUIMath.RepeatIndex(corner + 2, 4));

                    if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(val), mInvert, NGUIMath.RepeatIndex(corner + 2, 4)))
                    {
                        for (int i = 0; i < 4; ++i)
                        {
                            verts.Add(mTempPos[i]);
                            uvs.Add(mTempUVs[i]);
                            cols.Add(col);
                        }
                    }
                }
                return;
            }
        }

        // Fill the buffer with the quad for the sprite
        for (int i = 0; i < 4; ++i)
        {
            verts.Add(mTempPos[i]);
            uvs.Add(mTempUVs[i]);
            cols.Add(col);
        }
    }
예제 #26
0
 // Token: 0x060004D6 RID: 1238 RVA: 0x0002DFA4 File Offset: 0x0002C1A4
 protected void FilledFill(List <Vector3> verts, List <Vector2> uvs, List <Color> cols, ref Vector4 v, ref Vector4 u, ref Color c)
 {
     if (this.mFillAmount < 0.001f)
     {
         return;
     }
     if (this.mFillDirection == UIBasicSprite.FillDirection.Horizontal || this.mFillDirection == UIBasicSprite.FillDirection.Vertical)
     {
         if (this.mFillDirection == UIBasicSprite.FillDirection.Horizontal)
         {
             float num = (u.z - u.x) * this.mFillAmount;
             if (this.mInvert)
             {
                 v.x = v.z - (v.z - v.x) * this.mFillAmount;
                 u.x = u.z - num;
             }
             else
             {
                 v.z = v.x + (v.z - v.x) * this.mFillAmount;
                 u.z = u.x + num;
             }
         }
         else if (this.mFillDirection == UIBasicSprite.FillDirection.Vertical)
         {
             float num2 = (u.w - u.y) * this.mFillAmount;
             if (this.mInvert)
             {
                 v.y = v.w - (v.w - v.y) * this.mFillAmount;
                 u.y = u.w - num2;
             }
             else
             {
                 v.w = v.y + (v.w - v.y) * this.mFillAmount;
                 u.w = u.y + num2;
             }
         }
     }
     UIBasicSprite.mTempPos[0] = new Vector2(v.x, v.y);
     UIBasicSprite.mTempPos[1] = new Vector2(v.x, v.w);
     UIBasicSprite.mTempPos[2] = new Vector2(v.z, v.w);
     UIBasicSprite.mTempPos[3] = new Vector2(v.z, v.y);
     UIBasicSprite.mTempUVs[0] = new Vector2(u.x, u.y);
     UIBasicSprite.mTempUVs[1] = new Vector2(u.x, u.w);
     UIBasicSprite.mTempUVs[2] = new Vector2(u.z, u.w);
     UIBasicSprite.mTempUVs[3] = new Vector2(u.z, u.y);
     if (this.mFillAmount < 1f)
     {
         if (this.mFillDirection == UIBasicSprite.FillDirection.Radial90)
         {
             if (UIBasicSprite.RadialCut(UIBasicSprite.mTempPos, UIBasicSprite.mTempUVs, this.mFillAmount, this.mInvert, 0))
             {
                 for (int i = 0; i < 4; i++)
                 {
                     verts.Add(UIBasicSprite.mTempPos[i]);
                     uvs.Add(UIBasicSprite.mTempUVs[i]);
                     cols.Add(c);
                 }
             }
             return;
         }
         if (this.mFillDirection == UIBasicSprite.FillDirection.Radial180)
         {
             for (int j = 0; j < 2; j++)
             {
                 float t  = 0f;
                 float t2 = 1f;
                 float t3;
                 float t4;
                 if (j == 0)
                 {
                     t3 = 0f;
                     t4 = 0.5f;
                 }
                 else
                 {
                     t3 = 0.5f;
                     t4 = 1f;
                 }
                 UIBasicSprite.mTempPos[0].x = Mathf.Lerp(v.x, v.z, t3);
                 UIBasicSprite.mTempPos[1].x = UIBasicSprite.mTempPos[0].x;
                 UIBasicSprite.mTempPos[2].x = Mathf.Lerp(v.x, v.z, t4);
                 UIBasicSprite.mTempPos[3].x = UIBasicSprite.mTempPos[2].x;
                 UIBasicSprite.mTempPos[0].y = Mathf.Lerp(v.y, v.w, t);
                 UIBasicSprite.mTempPos[1].y = Mathf.Lerp(v.y, v.w, t2);
                 UIBasicSprite.mTempPos[2].y = UIBasicSprite.mTempPos[1].y;
                 UIBasicSprite.mTempPos[3].y = UIBasicSprite.mTempPos[0].y;
                 UIBasicSprite.mTempUVs[0].x = Mathf.Lerp(u.x, u.z, t3);
                 UIBasicSprite.mTempUVs[1].x = UIBasicSprite.mTempUVs[0].x;
                 UIBasicSprite.mTempUVs[2].x = Mathf.Lerp(u.x, u.z, t4);
                 UIBasicSprite.mTempUVs[3].x = UIBasicSprite.mTempUVs[2].x;
                 UIBasicSprite.mTempUVs[0].y = Mathf.Lerp(u.y, u.w, t);
                 UIBasicSprite.mTempUVs[1].y = Mathf.Lerp(u.y, u.w, t2);
                 UIBasicSprite.mTempUVs[2].y = UIBasicSprite.mTempUVs[1].y;
                 UIBasicSprite.mTempUVs[3].y = UIBasicSprite.mTempUVs[0].y;
                 float value = (!this.mInvert) ? (this.fillAmount * 2f - (float)j) : (this.mFillAmount * 2f - (float)(1 - j));
                 if (UIBasicSprite.RadialCut(UIBasicSprite.mTempPos, UIBasicSprite.mTempUVs, Mathf.Clamp01(value), !this.mInvert, NGUIMath.RepeatIndex(j + 3, 4)))
                 {
                     for (int k = 0; k < 4; k++)
                     {
                         verts.Add(UIBasicSprite.mTempPos[k]);
                         uvs.Add(UIBasicSprite.mTempUVs[k]);
                         cols.Add(c);
                     }
                 }
             }
             return;
         }
         if (this.mFillDirection == UIBasicSprite.FillDirection.Radial360)
         {
             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;
                 }
                 UIBasicSprite.mTempPos[0].x = Mathf.Lerp(v.x, v.z, t5);
                 UIBasicSprite.mTempPos[1].x = UIBasicSprite.mTempPos[0].x;
                 UIBasicSprite.mTempPos[2].x = Mathf.Lerp(v.x, v.z, t6);
                 UIBasicSprite.mTempPos[3].x = UIBasicSprite.mTempPos[2].x;
                 UIBasicSprite.mTempPos[0].y = Mathf.Lerp(v.y, v.w, t7);
                 UIBasicSprite.mTempPos[1].y = Mathf.Lerp(v.y, v.w, t8);
                 UIBasicSprite.mTempPos[2].y = UIBasicSprite.mTempPos[1].y;
                 UIBasicSprite.mTempPos[3].y = UIBasicSprite.mTempPos[0].y;
                 UIBasicSprite.mTempUVs[0].x = Mathf.Lerp(u.x, u.z, t5);
                 UIBasicSprite.mTempUVs[1].x = UIBasicSprite.mTempUVs[0].x;
                 UIBasicSprite.mTempUVs[2].x = Mathf.Lerp(u.x, u.z, t6);
                 UIBasicSprite.mTempUVs[3].x = UIBasicSprite.mTempUVs[2].x;
                 UIBasicSprite.mTempUVs[0].y = Mathf.Lerp(u.y, u.w, t7);
                 UIBasicSprite.mTempUVs[1].y = Mathf.Lerp(u.y, u.w, t8);
                 UIBasicSprite.mTempUVs[2].y = UIBasicSprite.mTempUVs[1].y;
                 UIBasicSprite.mTempUVs[3].y = UIBasicSprite.mTempUVs[0].y;
                 float value2 = this.mInvert ? (this.mFillAmount * 4f - (float)NGUIMath.RepeatIndex(l + 2, 4)) : (this.mFillAmount * 4f - (float)(3 - NGUIMath.RepeatIndex(l + 2, 4)));
                 if (UIBasicSprite.RadialCut(UIBasicSprite.mTempPos, UIBasicSprite.mTempUVs, Mathf.Clamp01(value2), this.mInvert, NGUIMath.RepeatIndex(l + 2, 4)))
                 {
                     for (int m = 0; m < 4; m++)
                     {
                         verts.Add(UIBasicSprite.mTempPos[m]);
                         uvs.Add(UIBasicSprite.mTempUVs[m]);
                         cols.Add(c);
                     }
                 }
             }
             return;
         }
     }
     for (int n = 0; n < 4; n++)
     {
         verts.Add(UIBasicSprite.mTempPos[n]);
         uvs.Add(UIBasicSprite.mTempUVs[n]);
         cols.Add(c);
     }
 }
예제 #27
0
 private void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
 {
     if (!(mFillAmount < 0.001f))
     {
         Vector4 drawingDimensions = this.drawingDimensions;
         Vector4 drawingUVs        = this.drawingUVs;
         Color32 drawingColor      = this.drawingColor;
         if (mFillDirection == FillDirection.Horizontal || mFillDirection == FillDirection.Vertical)
         {
             if (mFillDirection == FillDirection.Horizontal)
             {
                 float num = (drawingUVs.z - drawingUVs.x) * mFillAmount;
                 if (mInvert)
                 {
                     drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * mFillAmount;
                     drawingUVs.x        = drawingUVs.z - num;
                 }
                 else
                 {
                     drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * mFillAmount;
                     drawingUVs.z        = drawingUVs.x + num;
                 }
             }
             else if (mFillDirection == FillDirection.Vertical)
             {
                 float num2 = (drawingUVs.w - drawingUVs.y) * mFillAmount;
                 if (mInvert)
                 {
                     drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * mFillAmount;
                     drawingUVs.y        = drawingUVs.w - num2;
                 }
                 else
                 {
                     drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * mFillAmount;
                     drawingUVs.w        = drawingUVs.y + num2;
                 }
             }
         }
         mTempPos[0] = new Vector2(drawingDimensions.x, drawingDimensions.y);
         mTempPos[1] = new Vector2(drawingDimensions.x, drawingDimensions.w);
         mTempPos[2] = new Vector2(drawingDimensions.z, drawingDimensions.w);
         mTempPos[3] = new Vector2(drawingDimensions.z, drawingDimensions.y);
         mTempUVs[0] = new Vector2(drawingUVs.x, drawingUVs.y);
         mTempUVs[1] = new Vector2(drawingUVs.x, drawingUVs.w);
         mTempUVs[2] = new Vector2(drawingUVs.z, drawingUVs.w);
         mTempUVs[3] = new Vector2(drawingUVs.z, drawingUVs.y);
         if (mFillAmount < 1f)
         {
             if (mFillDirection == FillDirection.Radial90)
             {
                 if (RadialCut(mTempPos, mTempUVs, mFillAmount, mInvert, 0))
                 {
                     for (int i = 0; i < 4; i++)
                     {
                         verts.Add(mTempPos[i]);
                         uvs.Add(mTempUVs[i]);
                         cols.Add(drawingColor);
                     }
                 }
                 return;
             }
             if (mFillDirection == FillDirection.Radial180)
             {
                 for (int j = 0; j < 2; j++)
                 {
                     float t  = 0f;
                     float t2 = 1f;
                     float t3;
                     float t4;
                     if (j == 0)
                     {
                         t3 = 0f;
                         t4 = 0.5f;
                     }
                     else
                     {
                         t3 = 0.5f;
                         t4 = 1f;
                     }
                     mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t3);
                     mTempPos[1].x = mTempPos[0].x;
                     mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t4);
                     mTempPos[3].x = mTempPos[2].x;
                     mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t);
                     mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t2);
                     mTempPos[2].y = mTempPos[1].y;
                     mTempPos[3].y = mTempPos[0].y;
                     mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t3);
                     mTempUVs[1].x = mTempUVs[0].x;
                     mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t4);
                     mTempUVs[3].x = mTempUVs[2].x;
                     mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t);
                     mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t2);
                     mTempUVs[2].y = mTempUVs[1].y;
                     mTempUVs[3].y = mTempUVs[0].y;
                     float value = mInvert ? (mFillAmount * 2f - (float)(1 - j)) : (fillAmount * 2f - (float)j);
                     if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(value), !mInvert, NGUIMath.RepeatIndex(j + 3, 4)))
                     {
                         for (int k = 0; k < 4; k++)
                         {
                             verts.Add(mTempPos[k]);
                             uvs.Add(mTempUVs[k]);
                             cols.Add(drawingColor);
                         }
                     }
                 }
                 return;
             }
             if (mFillDirection == FillDirection.Radial360)
             {
                 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;
                     }
                     mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t5);
                     mTempPos[1].x = mTempPos[0].x;
                     mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, t6);
                     mTempPos[3].x = mTempPos[2].x;
                     mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t7);
                     mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, t8);
                     mTempPos[2].y = mTempPos[1].y;
                     mTempPos[3].y = mTempPos[0].y;
                     mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t5);
                     mTempUVs[1].x = mTempUVs[0].x;
                     mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, t6);
                     mTempUVs[3].x = mTempUVs[2].x;
                     mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t7);
                     mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, t8);
                     mTempUVs[2].y = mTempUVs[1].y;
                     mTempUVs[3].y = mTempUVs[0].y;
                     float value2 = (!mInvert) ? (mFillAmount * 4f - (float)(3 - NGUIMath.RepeatIndex(l + 2, 4))) : (mFillAmount * 4f - (float)NGUIMath.RepeatIndex(l + 2, 4));
                     if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(value2), mInvert, NGUIMath.RepeatIndex(l + 2, 4)))
                     {
                         for (int m = 0; m < 4; m++)
                         {
                             verts.Add(mTempPos[m]);
                             uvs.Add(mTempUVs[m]);
                             cols.Add(drawingColor);
                         }
                     }
                 }
                 return;
             }
         }
         for (int n = 0; n < 4; n++)
         {
             verts.Add(mTempPos[n]);
             uvs.Add(mTempUVs[n]);
             cols.Add(drawingColor);
         }
     }
 }
예제 #28
0
    /// <summary>
    /// 画圈
    /// </summary>
    bool DrawCircle(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols,
                    Vector2[] tempPos, Vector2[] tempUV, float angle, int idx, Color color)
    {
        Vector4 v = drawingDimensions;
        Vector4 u = drawingUVs;

//		Color32 c = drawingColor;

        for (int corner = 0; corner < 4; ++corner)
        {
            float fx0, fx1, fy0, fy1;

            if (corner < 2)
            {
                fx0 = 0f; fx1 = 0.5f;
            }
            else
            {
                fx0 = 0.5f; fx1 = 1f;
            }

            if (corner == 0 || corner == 3)
            {
                fy0 = 0f; fy1 = 0.5f;
            }
            else
            {
                fy0 = 0.5f; fy1 = 1f;
            }

            tempPos[0].x = Mathf.Lerp(v.x, v.z, fx0);
            tempPos[1].x = tempPos[0].x;
            tempPos[2].x = Mathf.Lerp(v.x, v.z, fx1);
            tempPos[3].x = tempPos[2].x;

            tempPos[0].y = Mathf.Lerp(v.y, v.w, fy0);
            tempPos[1].y = Mathf.Lerp(v.y, v.w, fy1);
            tempPos[2].y = tempPos[1].y;
            tempPos[3].y = tempPos[0].y;

            tempUV[0].x = Mathf.Lerp(u.x, u.z, fx0);
            tempUV[1].x = tempUV[0].x;
            tempUV[2].x = Mathf.Lerp(u.x, u.z, fx1);
            tempUV[3].x = tempUV[2].x;

            tempUV[0].y = Mathf.Lerp(u.y, u.w, fy0);
            tempUV[1].y = Mathf.Lerp(u.y, u.w, fy1);
            tempUV[2].y = tempUV[1].y;
            tempUV[3].y = tempUV[0].y;

            float val = angle;

            bool invert = true;

            if (idx != 0)
            {
                invert = !invert;

                val = invert ?
                      (angle) * 4f - NGUIMath.RepeatIndex(corner + 2, 4) :
                      (angle) * 4f - (3 - NGUIMath.RepeatIndex(corner + 2, 4));
            }
            else
            {
                val = corner == 1 || corner == 2
                                        ? angle * 2f
                                        : angle * 2f - 1f;
            }

            if (RadialCut(
                    tempPos,
                    tempUV,
                    Mathf.Clamp01(val),
                    idx == 0 ? corner > 1 : invert,
                    NGUIMath.RepeatIndex(corner + 2, 4)))
            {
                for (int j = 0; j < 4; ++j)
                {
                    verts.Add(tempPos[j]);
                    uvs.Add(tempUV[j]);
                    cols.Add(color);
                }
            }
        }

        return(true);
    }
예제 #29
0
    private static void RadialCut(Vector2[] xy, float cos, float sin, bool invert, int corner)
    {
        int num  = NGUIMath.RepeatIndex(corner + 1, 4);
        int num2 = NGUIMath.RepeatIndex(corner + 2, 4);
        int num3 = NGUIMath.RepeatIndex(corner + 3, 4);

        if ((corner & 1) == 1)
        {
            if (sin > cos)
            {
                cos /= sin;
                sin  = 1f;
                if (invert)
                {
                    xy[num].x  = Mathf.Lerp(xy[corner].x, xy[num2].x, cos);
                    xy[num2].x = xy[num].x;
                }
            }
            else if (cos > sin)
            {
                sin /= cos;
                cos  = 1f;
                if (!invert)
                {
                    xy[num2].y = Mathf.Lerp(xy[corner].y, xy[num2].y, sin);
                    xy[num3].y = xy[num2].y;
                }
            }
            else
            {
                cos = 1f;
                sin = 1f;
            }
            if (!invert)
            {
                xy[num3].x = Mathf.Lerp(xy[corner].x, xy[num2].x, cos);
            }
            else
            {
                xy[num].y = Mathf.Lerp(xy[corner].y, xy[num2].y, sin);
            }
        }
        else
        {
            if (cos > sin)
            {
                sin /= cos;
                cos  = 1f;
                if (!invert)
                {
                    xy[num].y  = Mathf.Lerp(xy[corner].y, xy[num2].y, sin);
                    xy[num2].y = xy[num].y;
                }
            }
            else if (sin > cos)
            {
                cos /= sin;
                sin  = 1f;
                if (invert)
                {
                    xy[num2].x = Mathf.Lerp(xy[corner].x, xy[num2].x, cos);
                    xy[num3].x = xy[num2].x;
                }
            }
            else
            {
                cos = 1f;
                sin = 1f;
            }
            if (invert)
            {
                xy[num3].y = Mathf.Lerp(xy[corner].y, xy[num2].y, sin);
            }
            else
            {
                xy[num].x = Mathf.Lerp(xy[corner].x, xy[num2].x, cos);
            }
        }
    }
예제 #30
0
 private void FilledFill(BetterList <Vector3> verts, BetterList <Vector2> uvs, BetterList <Color32> cols)
 {
     //IL_0012: Unknown result type (might be due to invalid IL or missing references)
     //IL_0017: Unknown result type (might be due to invalid IL or missing references)
     //IL_0019: Unknown result type (might be due to invalid IL or missing references)
     //IL_001e: Unknown result type (might be due to invalid IL or missing references)
     //IL_0020: Unknown result type (might be due to invalid IL or missing references)
     //IL_0025: Unknown result type (might be due to invalid IL or missing references)
     //IL_0197: Unknown result type (might be due to invalid IL or missing references)
     //IL_019c: Unknown result type (might be due to invalid IL or missing references)
     //IL_01ba: Unknown result type (might be due to invalid IL or missing references)
     //IL_01bf: Unknown result type (might be due to invalid IL or missing references)
     //IL_01dd: Unknown result type (might be due to invalid IL or missing references)
     //IL_01e2: Unknown result type (might be due to invalid IL or missing references)
     //IL_0200: Unknown result type (might be due to invalid IL or missing references)
     //IL_0205: Unknown result type (might be due to invalid IL or missing references)
     //IL_0223: Unknown result type (might be due to invalid IL or missing references)
     //IL_0228: Unknown result type (might be due to invalid IL or missing references)
     //IL_0246: Unknown result type (might be due to invalid IL or missing references)
     //IL_024b: Unknown result type (might be due to invalid IL or missing references)
     //IL_0269: Unknown result type (might be due to invalid IL or missing references)
     //IL_026e: Unknown result type (might be due to invalid IL or missing references)
     //IL_028c: Unknown result type (might be due to invalid IL or missing references)
     //IL_0291: Unknown result type (might be due to invalid IL or missing references)
     //IL_02e8: Unknown result type (might be due to invalid IL or missing references)
     //IL_02ed: Unknown result type (might be due to invalid IL or missing references)
     //IL_0304: Unknown result type (might be due to invalid IL or missing references)
     //IL_030f: Unknown result type (might be due to invalid IL or missing references)
     //IL_060d: Unknown result type (might be due to invalid IL or missing references)
     //IL_0612: Unknown result type (might be due to invalid IL or missing references)
     //IL_0629: Unknown result type (might be due to invalid IL or missing references)
     //IL_0634: Unknown result type (might be due to invalid IL or missing references)
     //IL_0970: Unknown result type (might be due to invalid IL or missing references)
     //IL_0975: Unknown result type (might be due to invalid IL or missing references)
     //IL_098c: Unknown result type (might be due to invalid IL or missing references)
     //IL_0997: Unknown result type (might be due to invalid IL or missing references)
     //IL_09cf: Unknown result type (might be due to invalid IL or missing references)
     //IL_09d4: Unknown result type (might be due to invalid IL or missing references)
     //IL_09eb: Unknown result type (might be due to invalid IL or missing references)
     //IL_09f6: Unknown result type (might be due to invalid IL or missing references)
     if (!(mFillAmount < 0.001f))
     {
         Vector4 drawingDimensions = this.drawingDimensions;
         Vector4 drawingUVs        = this.drawingUVs;
         Color32 drawingColor      = this.drawingColor;
         if (mFillDirection == FillDirection.Horizontal || mFillDirection == FillDirection.Vertical)
         {
             if (mFillDirection == FillDirection.Horizontal)
             {
                 float num = (drawingUVs.z - drawingUVs.x) * mFillAmount;
                 if (mInvert)
                 {
                     drawingDimensions.x = drawingDimensions.z - (drawingDimensions.z - drawingDimensions.x) * mFillAmount;
                     drawingUVs.x        = drawingUVs.z - num;
                 }
                 else
                 {
                     drawingDimensions.z = drawingDimensions.x + (drawingDimensions.z - drawingDimensions.x) * mFillAmount;
                     drawingUVs.z        = drawingUVs.x + num;
                 }
             }
             else if (mFillDirection == FillDirection.Vertical)
             {
                 float num2 = (drawingUVs.w - drawingUVs.y) * mFillAmount;
                 if (mInvert)
                 {
                     drawingDimensions.y = drawingDimensions.w - (drawingDimensions.w - drawingDimensions.y) * mFillAmount;
                     drawingUVs.y        = drawingUVs.w - num2;
                 }
                 else
                 {
                     drawingDimensions.w = drawingDimensions.y + (drawingDimensions.w - drawingDimensions.y) * mFillAmount;
                     drawingUVs.w        = drawingUVs.y + num2;
                 }
             }
         }
         mTempPos[0] = new Vector2(drawingDimensions.x, drawingDimensions.y);
         mTempPos[1] = new Vector2(drawingDimensions.x, drawingDimensions.w);
         mTempPos[2] = new Vector2(drawingDimensions.z, drawingDimensions.w);
         mTempPos[3] = new Vector2(drawingDimensions.z, drawingDimensions.y);
         mTempUVs[0] = new Vector2(drawingUVs.x, drawingUVs.y);
         mTempUVs[1] = new Vector2(drawingUVs.x, drawingUVs.w);
         mTempUVs[2] = new Vector2(drawingUVs.z, drawingUVs.w);
         mTempUVs[3] = new Vector2(drawingUVs.z, drawingUVs.y);
         if (mFillAmount < 1f)
         {
             if (mFillDirection == FillDirection.Radial90)
             {
                 if (RadialCut(mTempPos, mTempUVs, mFillAmount, mInvert, 0))
                 {
                     for (int i = 0; i < 4; i++)
                     {
                         verts.Add(Vector2.op_Implicit(mTempPos[i]));
                         uvs.Add(mTempUVs[i]);
                         cols.Add(drawingColor);
                     }
                 }
                 return;
             }
             if (mFillDirection == FillDirection.Radial180)
             {
                 for (int j = 0; j < 2; j++)
                 {
                     float num3 = 0f;
                     float num4 = 1f;
                     float num5;
                     float num6;
                     if (j == 0)
                     {
                         num5 = 0f;
                         num6 = 0.5f;
                     }
                     else
                     {
                         num5 = 0.5f;
                         num6 = 1f;
                     }
                     mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, num5);
                     mTempPos[1].x = mTempPos[0].x;
                     mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, num6);
                     mTempPos[3].x = mTempPos[2].x;
                     mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, num3);
                     mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, num4);
                     mTempPos[2].y = mTempPos[1].y;
                     mTempPos[3].y = mTempPos[0].y;
                     mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, num5);
                     mTempUVs[1].x = mTempUVs[0].x;
                     mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, num6);
                     mTempUVs[3].x = mTempUVs[2].x;
                     mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, num3);
                     mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, num4);
                     mTempUVs[2].y = mTempUVs[1].y;
                     mTempUVs[3].y = mTempUVs[0].y;
                     float num7 = mInvert ? (mFillAmount * 2f - (float)(1 - j)) : (fillAmount * 2f - (float)j);
                     if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(num7), !mInvert, NGUIMath.RepeatIndex(j + 3, 4)))
                     {
                         for (int k = 0; k < 4; k++)
                         {
                             verts.Add(Vector2.op_Implicit(mTempPos[k]));
                             uvs.Add(mTempUVs[k]);
                             cols.Add(drawingColor);
                         }
                     }
                 }
                 return;
             }
             if (mFillDirection == FillDirection.Radial360)
             {
                 for (int l = 0; l < 4; l++)
                 {
                     float num8;
                     float num9;
                     if (l < 2)
                     {
                         num8 = 0f;
                         num9 = 0.5f;
                     }
                     else
                     {
                         num8 = 0.5f;
                         num9 = 1f;
                     }
                     float num10;
                     float num11;
                     if (l == 0 || l == 3)
                     {
                         num10 = 0f;
                         num11 = 0.5f;
                     }
                     else
                     {
                         num10 = 0.5f;
                         num11 = 1f;
                     }
                     mTempPos[0].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, num8);
                     mTempPos[1].x = mTempPos[0].x;
                     mTempPos[2].x = Mathf.Lerp(drawingDimensions.x, drawingDimensions.z, num9);
                     mTempPos[3].x = mTempPos[2].x;
                     mTempPos[0].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, num10);
                     mTempPos[1].y = Mathf.Lerp(drawingDimensions.y, drawingDimensions.w, num11);
                     mTempPos[2].y = mTempPos[1].y;
                     mTempPos[3].y = mTempPos[0].y;
                     mTempUVs[0].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, num8);
                     mTempUVs[1].x = mTempUVs[0].x;
                     mTempUVs[2].x = Mathf.Lerp(drawingUVs.x, drawingUVs.z, num9);
                     mTempUVs[3].x = mTempUVs[2].x;
                     mTempUVs[0].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, num10);
                     mTempUVs[1].y = Mathf.Lerp(drawingUVs.y, drawingUVs.w, num11);
                     mTempUVs[2].y = mTempUVs[1].y;
                     mTempUVs[3].y = mTempUVs[0].y;
                     float num12 = (!mInvert) ? (mFillAmount * 4f - (float)(3 - NGUIMath.RepeatIndex(l + 2, 4))) : (mFillAmount * 4f - (float)NGUIMath.RepeatIndex(l + 2, 4));
                     if (RadialCut(mTempPos, mTempUVs, Mathf.Clamp01(num12), mInvert, NGUIMath.RepeatIndex(l + 2, 4)))
                     {
                         for (int m = 0; m < 4; m++)
                         {
                             verts.Add(Vector2.op_Implicit(mTempPos[m]));
                             uvs.Add(mTempUVs[m]);
                             cols.Add(drawingColor);
                         }
                     }
                 }
                 return;
             }
         }
         for (int n = 0; n < 4; n++)
         {
             verts.Add(Vector2.op_Implicit(mTempPos[n]));
             uvs.Add(mTempUVs[n]);
             cols.Add(drawingColor);
         }
     }
 }