public void Draw(ImDrawListPtr drawList, float percent, Vector2 position, int segments, float scale = 1f) { if (segments < 1) { segments = 1; } if (segments > 4) { segments = 4; } int size = (int)Math.Ceiling(256 * scale); int sizeHalf = (int)Math.Floor(size / 2f); percent = Math.Max(percent > 0 ? 0.002f : 0, percent); var color = ImGui.GetColorU32(new Vector4(Color.X, Color.Y, Color.Z, Alpha)); drawList.PushClipRect(position, position + new Vector2(sizeHalf, sizeHalf)); ImageDrawing.ImageRotated(drawList, Image.ImGuiHandle, new Vector2(position.X + sizeHalf, position.Y + sizeHalf), new Vector2(size, size), (-0.25f + (Flip ? 0.5f : 0) + Math.Min(percent * 0.25f * segments, 0.25f)) * (float)Math.PI * 2, color); drawList.PopClipRect(); if (segments < 2) { return; } drawList.PushClipRect(position + new Vector2(sizeHalf, 0), position + new Vector2(sizeHalf * 2, sizeHalf)); ImageDrawing.ImageRotated(drawList, Image.ImGuiHandle, new Vector2(position.X + sizeHalf, position.Y + sizeHalf), new Vector2(size, size), (-0.25f + (Flip ? 0.5f : 0) + Math.Min(Math.Max(percent * 0.25f * segments, 0.25f), 0.5f)) * (float)Math.PI * 2, color); drawList.PopClipRect(); if (segments < 3) { return; } drawList.PushClipRect(position + new Vector2(sizeHalf, sizeHalf), position + new Vector2(sizeHalf * 2, sizeHalf * 2)); ImageDrawing.ImageRotated(drawList, Image.ImGuiHandle, new Vector2(position.X + sizeHalf, position.Y + sizeHalf), new Vector2(size, size), (-0.25f + (Flip ? 0.5f : 0) + Math.Min(Math.Max(percent * 0.25f * segments, 0.5f), 0.75f)) * (float)Math.PI * 2, color); drawList.PopClipRect(); if (segments < 4) { return; } drawList.PushClipRect(position + new Vector2(0, sizeHalf), position + new Vector2(sizeHalf, sizeHalf * 2)); ImageDrawing.ImageRotated(drawList, Image.ImGuiHandle, new Vector2(position.X + sizeHalf, position.Y + sizeHalf), new Vector2(size, size), (-0.25f + (Flip ? 0.5f : 0) + Math.Min(Math.Max(percent * 0.25f * segments, 0.75f), 1f)) * (float)Math.PI * 2, color); drawList.PopClipRect(); }
private void DrawRingEdgesAndTrack(ImDrawListPtr drawList, float percent, Vector2 position) { var size = 256; drawList.PushClipRect(position, position + new Vector2(size, size)); drawList.AddImage(RingTrackTexture.ImGuiHandle, position, position + new Vector2(size, size)); drawList.AddImage(RingBaseTexture.ImGuiHandle, position, position + new Vector2(size, size)); ImageDrawing.ImageRotated(drawList, RingEndTexture.ImGuiHandle, new Vector2(position.X + size / 2f, position.Y + size / 2f), new Vector2(RingEndTexture.Width, RingEndTexture.Height), Math.Min(percent, 1) * 0.75f * (float)Math.PI * 2); drawList.PopClipRect(); }