Exemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="origin"></param>
        /// <param name="amount"></param>
        /// <param name="clockwise"></param>
        /// <param name="vertRect"></param>
        /// <param name="uvRect"></param>
        /// <param name="verts"></param>
        /// <param name="uv"></param>
        public static void FillRadial180(Origin180 origin, float amount, bool clockwise, Rect vertRect, Rect uvRect, Vector3[] verts, Vector2[] uv)
        {
            switch (origin)
            {
            case Origin180.Top:
                if (amount <= 0.5f)
                {
                    vertRect.width /= 2;
                    uvRect.width   /= 2;
                    if (clockwise)
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    amount = amount / 0.5f;
                    FillRadial90(clockwise ? Origin90.TopLeft : Origin90.TopRight, amount, clockwise, vertRect, uvRect, verts, uv);
                    verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                    uv[4]    = uv[5] = uv[6] = uv[7] = uv[0];
                }
                else
                {
                    vertRect.width /= 2;
                    uvRect.width   /= 2;
                    if (!clockwise)
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    amount = (amount - 0.5f) / 0.5f;
                    FillRadial90(clockwise ? Origin90.TopRight : Origin90.TopLeft, amount, clockwise, vertRect, uvRect, verts, uv);

                    if (clockwise)
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    else
                    {
                        vertRect.x -= vertRect.width;
                        uvRect.x   -= uvRect.width;
                    }
                    NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                    NGraphics.FillUVOfQuad(uv, 4, uvRect);
                }
                break;

            case Origin180.Bottom:
                if (amount <= 0.5f)
                {
                    vertRect.width /= 2;
                    uvRect.width   /= 2;
                    if (!clockwise)
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    amount = amount / 0.5f;
                    FillRadial90(clockwise ? Origin90.BottomRight : Origin90.BottomLeft, amount, clockwise, vertRect, uvRect, verts, uv);
                    verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                    uv[4]    = uv[5] = uv[6] = uv[7] = uv[0];
                }
                else
                {
                    vertRect.width /= 2;
                    uvRect.width   /= 2;
                    if (clockwise)
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    amount = (amount - 0.5f) / 0.5f;
                    FillRadial90(clockwise ? Origin90.BottomLeft : Origin90.BottomRight, amount, clockwise, vertRect, uvRect, verts, uv);

                    if (clockwise)
                    {
                        vertRect.x -= vertRect.width;
                        uvRect.x   -= uvRect.width;
                    }
                    else
                    {
                        vertRect.x += vertRect.width;
                        uvRect.x   += uvRect.width;
                    }
                    NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                    NGraphics.FillUVOfQuad(uv, 4, uvRect);
                }
                break;

            case Origin180.Left:
                if (amount <= 0.5f)
                {
                    if (clockwise)
                    {
                        vertRect.height /= 2;
                        uvRect.yMin     += uvRect.height / 2;
                    }
                    else
                    {
                        vertRect.yMin += vertRect.height / 2;
                        uvRect.yMax   -= uvRect.height / 2;
                    }
                    amount = amount / 0.5f;
                    FillRadial90(clockwise ? Origin90.BottomLeft : Origin90.TopLeft, amount, clockwise, vertRect, uvRect, verts, uv);
                    verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                    uv[4]    = uv[5] = uv[6] = uv[7] = uv[0];
                }
                else
                {
                    if (clockwise)
                    {
                        vertRect.yMin += vertRect.height / 2;
                        uvRect.yMax   -= uvRect.height / 2;
                    }
                    else
                    {
                        vertRect.height /= 2;
                        uvRect.yMin     += uvRect.height / 2;
                    }
                    amount = (amount - 0.5f) / 0.5f;
                    FillRadial90(clockwise ? Origin90.TopLeft : Origin90.BottomLeft, amount, clockwise, vertRect, uvRect, verts, uv);

                    if (clockwise)
                    {
                        vertRect.y -= vertRect.height;
                        uvRect.y   += uvRect.height;
                    }
                    else
                    {
                        vertRect.y += vertRect.height;
                        uvRect.y   -= uvRect.height;
                    }
                    NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                    NGraphics.FillUVOfQuad(uv, 4, uvRect);
                }
                break;

            case Origin180.Right:
                if (amount <= 0.5f)
                {
                    if (clockwise)
                    {
                        vertRect.yMin += vertRect.height / 2;
                        uvRect.yMax   -= uvRect.height / 2;
                    }
                    else
                    {
                        vertRect.height /= 2;
                        uvRect.yMin     += uvRect.height / 2;
                    }
                    amount = amount / 0.5f;
                    FillRadial90(clockwise ? Origin90.TopRight : Origin90.BottomRight, amount, clockwise, vertRect, uvRect, verts, uv);
                    verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                    uv[4]    = uv[5] = uv[6] = uv[7] = uv[0];
                }
                else
                {
                    if (clockwise)
                    {
                        vertRect.height /= 2;
                        uvRect.yMin     += uvRect.height / 2;
                    }
                    else
                    {
                        vertRect.yMin += vertRect.height / 2;
                        uvRect.yMax   -= uvRect.height / 2;
                    }
                    amount = (amount - 0.5f) / 0.5f;
                    FillRadial90(clockwise ? Origin90.BottomRight : Origin90.TopRight, amount, clockwise, vertRect, uvRect, verts, uv);

                    if (clockwise)
                    {
                        vertRect.y += vertRect.height;
                        uvRect.y   -= uvRect.height;
                    }
                    else
                    {
                        vertRect.y -= vertRect.height;
                        uvRect.y   += uvRect.height;
                    }
                    NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                    NGraphics.FillUVOfQuad(uv, 4, uvRect);
                }
                break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="origin"></param>
        /// <param name="amount"></param>
        /// <param name="clockwise"></param>
        /// <param name="vertRect"></param>
        /// <param name="uvRect"></param>
        /// <param name="verts"></param>
        /// <param name="uv"></param>
        public static void FillRadial180(Origin180 origin, float amount, bool clockwise, Rect vertRect, Rect uvRect, Vector3[] verts, Vector2[] uv)
        {
            switch (origin)
            {
                case Origin180.Top:
                    if (amount <= 0.5f)
                    {
                        vertRect.width /= 2;
                        uvRect.width /= 2;
                        if (clockwise)
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        amount = amount / 0.5f;
                        FillRadial90(clockwise ? Origin90.TopLeft : Origin90.TopRight, amount, clockwise, vertRect, uvRect, verts, uv);
                        verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                        uv[4] = uv[5] = uv[6] = uv[7] = uv[0];
                    }
                    else
                    {
                        vertRect.width /= 2;
                        uvRect.width /= 2;
                        if (!clockwise)
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        amount = (amount - 0.5f) / 0.5f;
                        FillRadial90(clockwise ? Origin90.TopRight : Origin90.TopLeft, amount, clockwise, vertRect, uvRect, verts, uv);

                        if (clockwise)
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        else
                        {
                            vertRect.x -= vertRect.width;
                            uvRect.x -= uvRect.width;
                        }
                        NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                        NGraphics.FillUVOfQuad(uv, 4, uvRect);
                    }
                    break;

                case Origin180.Bottom:
                    if (amount <= 0.5f)
                    {
                        vertRect.width /= 2;
                        uvRect.width /= 2;
                        if (!clockwise)
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        amount = amount / 0.5f;
                        FillRadial90(clockwise ? Origin90.BottomRight : Origin90.BottomLeft, amount, clockwise, vertRect, uvRect, verts, uv);
                        verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                        uv[4] = uv[5] = uv[6] = uv[7] = uv[0];
                    }
                    else
                    {
                        vertRect.width /= 2;
                        uvRect.width /= 2;
                        if (clockwise)
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        amount = (amount - 0.5f) / 0.5f;
                        FillRadial90(clockwise ? Origin90.BottomLeft : Origin90.BottomRight, amount, clockwise, vertRect, uvRect, verts, uv);

                        if (clockwise)
                        {
                            vertRect.x -= vertRect.width;
                            uvRect.x -= uvRect.width;
                        }
                        else
                        {
                            vertRect.x += vertRect.width;
                            uvRect.x += uvRect.width;
                        }
                        NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                        NGraphics.FillUVOfQuad(uv, 4, uvRect);
                    }
                    break;

                case Origin180.Left:
                    if (amount <= 0.5f)
                    {
                        if (clockwise)
                        {
                            vertRect.height /= 2;
                            uvRect.yMin += uvRect.height / 2;
                        }
                        else
                        {
                            vertRect.yMin += vertRect.height / 2;
                            uvRect.yMax -= uvRect.height / 2;
                        }
                        amount = amount / 0.5f;
                        FillRadial90(clockwise ? Origin90.BottomLeft : Origin90.TopLeft, amount, clockwise, vertRect, uvRect, verts, uv);
                        verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                        uv[4] = uv[5] = uv[6] = uv[7] = uv[0];
                    }
                    else
                    {
                        if (clockwise)
                        {
                            vertRect.yMin += vertRect.height / 2;
                            uvRect.yMax -= uvRect.height / 2;
                        }
                        else
                        {
                            vertRect.height /= 2;
                            uvRect.yMin += uvRect.height / 2;
                        }
                        amount = (amount - 0.5f) / 0.5f;
                        FillRadial90(clockwise ? Origin90.TopLeft : Origin90.BottomLeft, amount, clockwise, vertRect, uvRect, verts, uv);

                        if (clockwise)
                        {
                            vertRect.y -= vertRect.height;
                            uvRect.y += uvRect.height;
                        }
                        else
                        {
                            vertRect.y += vertRect.height;
                            uvRect.y -= uvRect.height;
                        }
                        NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                        NGraphics.FillUVOfQuad(uv, 4, uvRect);
                    }
                    break;

                case Origin180.Right:
                    if (amount <= 0.5f)
                    {
                        if (clockwise)
                        {
                            vertRect.yMin += vertRect.height / 2;
                            uvRect.yMax -= uvRect.height / 2;
                        }
                        else
                        {
                            vertRect.height /= 2;
                            uvRect.yMin += uvRect.height / 2;
                        }
                        amount = amount / 0.5f;
                        FillRadial90(clockwise ? Origin90.TopRight : Origin90.BottomRight, amount, clockwise, vertRect, uvRect, verts, uv);
                        verts[4] = verts[5] = verts[6] = verts[7] = verts[0];
                        uv[4] = uv[5] = uv[6] = uv[7] = uv[0];
                    }
                    else
                    {
                        if (clockwise)
                        {
                            vertRect.height /= 2;
                            uvRect.yMin += uvRect.height / 2;
                        }
                        else
                        {
                            vertRect.yMin += vertRect.height / 2;
                            uvRect.yMax -= uvRect.height / 2;
                        }
                        amount = (amount - 0.5f) / 0.5f;
                        FillRadial90(clockwise ? Origin90.BottomRight : Origin90.TopRight, amount, clockwise, vertRect, uvRect, verts, uv);

                        if (clockwise)
                        {
                            vertRect.y += vertRect.height;
                            uvRect.y -= uvRect.height;
                        }
                        else
                        {
                            vertRect.y -= vertRect.height;
                            uvRect.y += uvRect.height;
                        }
                        NGraphics.FillVertsOfQuad(verts, 4, vertRect);
                        NGraphics.FillUVOfQuad(uv, 4, uvRect);
                    }
                    break;
            }
        }
Exemplo n.º 3
0
        //8 vertex
        static void FillRadial180(VertexBuffer vb, Rectangle vertRect, Origin180 origin, float amount, bool clockwise)
        {
            switch (origin)
            {
            case Origin180.Top:
                if (amount <= 0.5f)
                {
                    vertRect.Width /= 2;
                    if (clockwise)
                    {
                        vertRect.X += vertRect.Width;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.TopRight, amount / 0.5f, clockwise);
                    Vector3 vec = vb.GetPosition(-4);
                    vb.AddQuad(new Rectangle(vec.X, vec.Y, 0, 0));
                    vb.AddTriangles(-4);
                }
                else
                {
                    vertRect.Width /= 2;
                    if (!clockwise)
                    {
                        vertRect.X += vertRect.Width;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.TopLeft, (amount - 0.5f) / 0.5f, clockwise);

                    if (clockwise)
                    {
                        vertRect.X += vertRect.Width;
                    }
                    else
                    {
                        vertRect.X -= vertRect.Width;
                    }
                    vb.AddQuad(vertRect);
                    vb.AddTriangles(-4);
                }
                break;

            case Origin180.Bottom:
                if (amount <= 0.5f)
                {
                    vertRect.Width /= 2;
                    if (!clockwise)
                    {
                        vertRect.X += vertRect.Width;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.BottomLeft, amount / 0.5f, clockwise);
                    Vector3 vec = vb.GetPosition(-4);
                    vb.AddQuad(new Rectangle(vec.X, vec.Y, 0, 0));
                    vb.AddTriangles(-4);
                }
                else
                {
                    vertRect.Width /= 2;
                    if (clockwise)
                    {
                        vertRect.X += vertRect.Width;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.BottomRight, (amount - 0.5f) / 0.5f, clockwise);

                    if (clockwise)
                    {
                        vertRect.X -= vertRect.Width;
                    }
                    else
                    {
                        vertRect.X += vertRect.Width;
                    }
                    vb.AddQuad(vertRect);
                    vb.AddTriangles(-4);
                }
                break;

            case Origin180.Left:
                if (amount <= 0.5f)
                {
                    vertRect.Height /= 2;
                    if (!clockwise)
                    {
                        vertRect.Y += vertRect.Height;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.BottomLeft : Origin90.TopLeft, amount / 0.5f, clockwise);
                    Vector3 vec = vb.GetPosition(-4);
                    vb.AddQuad(new Rectangle(vec.X, vec.Y, 0, 0));
                    vb.AddTriangles(-4);
                }
                else
                {
                    vertRect.Height /= 2;
                    if (clockwise)
                    {
                        vertRect.Y += vertRect.Height;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.TopLeft : Origin90.BottomLeft, (amount - 0.5f) / 0.5f, clockwise);

                    if (clockwise)
                    {
                        vertRect.Y -= vertRect.Height;
                    }
                    else
                    {
                        vertRect.Y += vertRect.Height;
                    }
                    vb.AddQuad(vertRect);
                    vb.AddTriangles(-4);
                }
                break;

            case Origin180.Right:
                if (amount <= 0.5f)
                {
                    vertRect.Height /= 2;
                    if (clockwise)
                    {
                        vertRect.Y += vertRect.Height;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.TopRight : Origin90.BottomRight, amount / 0.5f, clockwise);
                    Vector3 vec = vb.GetPosition(-4);
                    vb.AddQuad(new Rectangle(vec.X, vec.Y, 0, 0));
                    vb.AddTriangles(-4);
                }
                else
                {
                    vertRect.Height /= 2;
                    if (!clockwise)
                    {
                        vertRect.Y += vertRect.Height;
                    }

                    FillRadial90(vb, vertRect, clockwise ? Origin90.BottomRight : Origin90.TopRight, (amount - 0.5f) / 0.5f, clockwise);

                    if (clockwise)
                    {
                        vertRect.Y += vertRect.Height;
                    }
                    else
                    {
                        vertRect.Y -= vertRect.Height;
                    }
                    vb.AddQuad(vertRect);
                    vb.AddTriangles(-4);
                }
                break;
            }
        }