/// <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 FillRadial360(Origin360 origin, float amount, bool clockwise, Rect vertRect, Rect uvRect, Vector3[] verts, Vector2[] uv) { switch (origin) { case Origin360.Top: if (amount < 0.5f) { amount = amount / 0.5f; vertRect.width /= 2; uvRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } FillRadial180(clockwise ? Origin180.Left : Origin180.Right, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } else { vertRect.width /= 2; uvRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } amount = (amount - 0.5f) / 0.5f; FillRadial180(clockwise ? Origin180.Right : Origin180.Left, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.Bottom: if (amount < 0.5f) { amount = amount / 0.5f; vertRect.width /= 2; uvRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } FillRadial180(clockwise ? Origin180.Right : Origin180.Left, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } else { vertRect.width /= 2; uvRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } amount = (amount - 0.5f) / 0.5f; FillRadial180(clockwise ? Origin180.Left : Origin180.Right, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.Left: if (amount < 0.5f) { amount = amount / 0.5f; if (clockwise) { vertRect.height /= 2; uvRect.yMin += uvRect.height / 2; } else { vertRect.yMin += vertRect.height / 2; uvRect.yMax -= uvRect.height / 2; } FillRadial180(clockwise ? Origin180.Bottom : Origin180.Top, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } 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; FillRadial180(clockwise ? Origin180.Top : Origin180.Bottom, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.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; FillRadial180(clockwise ? Origin180.Top : Origin180.Bottom, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } 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; FillRadial180(clockwise ? Origin180.Bottom : Origin180.Top, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; } }
//12 vertex static void FillRadial360(VertexBuffer vb, Rect vertRect, Origin360 origin, float amount, bool clockwise) { switch (origin) { case Origin360.Top: if (amount < 0.5f) { vertRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; } FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, amount / 0.5f, clockwise); Vector3 vec = vb.GetPosition(-8); vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); vb.AddTriangles(-4); } else { vertRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; } FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, (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 Origin360.Bottom: if (amount < 0.5f) { vertRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; } FillRadial180(vb, vertRect, clockwise ? Origin180.Right : Origin180.Left, amount / 0.5f, clockwise); Vector3 vec = vb.GetPosition(-8); vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); vb.AddTriangles(-4); } else { vertRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; } FillRadial180(vb, vertRect, clockwise ? Origin180.Left : Origin180.Right, (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 Origin360.Left: if (amount < 0.5f) { vertRect.height /= 2; if (!clockwise) { vertRect.y += vertRect.height; } FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, amount / 0.5f, clockwise); Vector3 vec = vb.GetPosition(-8); vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); vb.AddTriangles(-4); } else { vertRect.height /= 2; if (clockwise) { vertRect.y += vertRect.height; } FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, (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 Origin360.Right: if (amount < 0.5f) { vertRect.height /= 2; if (clockwise) { vertRect.y += vertRect.height; } FillRadial180(vb, vertRect, clockwise ? Origin180.Top : Origin180.Bottom, amount / 0.5f, clockwise); Vector3 vec = vb.GetPosition(-8); vb.AddQuad(new Rect(vec.x, vec.y, 0, 0)); vb.AddTriangles(-4); } else { vertRect.height /= 2; if (!clockwise) { vertRect.y += vertRect.height; } FillRadial180(vb, vertRect, clockwise ? Origin180.Bottom : Origin180.Top, (amount - 0.5f) / 0.5f, clockwise); if (clockwise) { vertRect.y += vertRect.height; } else { vertRect.y -= vertRect.height; } vb.AddQuad(vertRect); vb.AddTriangles(-4); } break; } }
public static void FillRadial360(Origin360 origin, float amount, bool clockwise, Rect vertRect, Rect uvRect, Vector3[] verts, Vector2[] uv) { switch (origin) { case Origin360.Top: if (amount < 0.5f) { amount = amount / 0.5f; vertRect.width /= 2; uvRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } FillRadial180(clockwise ? Origin180.Left : Origin180.Right, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } else { vertRect.width /= 2; uvRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } amount = (amount - 0.5f) / 0.5f; FillRadial180(clockwise ? Origin180.Right : Origin180.Left, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.Bottom: if (amount < 0.5f) { amount = amount / 0.5f; vertRect.width /= 2; uvRect.width /= 2; if (!clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } FillRadial180(clockwise ? Origin180.Right : Origin180.Left, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } else { vertRect.width /= 2; uvRect.width /= 2; if (clockwise) { vertRect.x += vertRect.width; uvRect.x += uvRect.width; } amount = (amount - 0.5f) / 0.5f; FillRadial180(clockwise ? Origin180.Left : Origin180.Right, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.Left: if (amount < 0.5f) { amount = amount / 0.5f; if (clockwise) { vertRect.height /= 2; uvRect.yMin += uvRect.height / 2; } else { vertRect.yMin += vertRect.height / 2; uvRect.yMax -= uvRect.height / 2; } FillRadial180(clockwise ? Origin180.Bottom : Origin180.Top, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } 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; FillRadial180(clockwise ? Origin180.Top : Origin180.Bottom, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; case Origin360.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; FillRadial180(clockwise ? Origin180.Top : Origin180.Bottom, amount, clockwise, vertRect, uvRect, verts, uv); verts[8] = verts[9] = verts[10] = verts[11] = verts[7]; uv[8] = uv[9] = uv[10] = uv[11] = uv[7]; } 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; FillRadial180(clockwise ? Origin180.Bottom : Origin180.Top, 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, 8, vertRect); NGraphics.FillUVOfQuad(uv, 8, uvRect); } break; } }