private void DrawCircleSmooth() { var anchors = new List <Vector2>(); var screenOffset = new Vector2(MyGameWindow.main.Width / 2f, MyGameWindow.main.Height / 2f); for (int i = 0; i < SAMPLE_SIZE / 3f; ++i) { var startPercent = i / (SAMPLE_SIZE / 3f); var start = CalculatePoint(startPercent, INNER_MIN_RADIUS + m_RadiusValue, screenOffset); var barValue = OUTER_MAX_RADIUS * (m_SpectrumTotal[i] / m_MaxValue); if (m_SpectrumTotal[i] <= SPECTRUM_MIN) { barValue = OUTER_MIN_RADIUS; } if (barValue >= m_CurrentBarValue[i]) { if (m_SpectrumTotal[i] - m_OldSpectrumTotal[i] > 0.0025f && m_OldSpectrumTotal[i] < 0.005f) { barValue *= 2f; } m_CurrentBarValue[i] = barValue; } else { m_CurrentBarValue[i] -= SPECTRUM_DECAY * Time.deltaTime; } if (m_CurrentBarValue[i] < OUTER_MIN_RADIUS) { m_CurrentBarValue[i] = OUTER_MIN_RADIUS; } var endPercent = (i + 0.5f) / (SAMPLE_SIZE / 3f); var end = CalculatePoint( endPercent, INNER_MIN_RADIUS + m_RadiusValue + m_CurrentBarValue[i], screenOffset); anchors.Add(end); } var vertexes = new List <Vector2>(); var colors = new List <Color4>(); for (var i = 0; i < anchors.Count; ++i) { var startAnchor = i - 1 >= 0 ? anchors[i - 1] : anchors.Last(); var startBarValue = i - 1 >= 0 ? m_CurrentBarValue[i - 1] : m_CurrentBarValue.Last(); var controlPoint = startBarValue > m_CurrentBarValue[i] ? CalculatePoint((float)i / anchors.Count, INNER_MIN_RADIUS + m_RadiusValue + startBarValue, screenOffset) : CalculatePoint((float)i / anchors.Count, INNER_MIN_RADIUS + m_RadiusValue + m_CurrentBarValue[i], screenOffset); var bezier = new BezierCurveQuadric(startAnchor, anchors[i], controlPoint); var endColor = new Color4( Color4.White.R + m_CurrentBarValue[i] / 100f * (Color4.BlueViolet.R - Color4.White.R), Color4.White.G + m_CurrentBarValue[i] / 100f * (Color4.BlueViolet.G - Color4.White.G), Color4.White.B + m_CurrentBarValue[i] / 100f * (Color4.BlueViolet.B - Color4.White.B), 1f); for (var j = 0f; j < 1f; j += 0.005f) { colors.Add(endColor); vertexes.Add(bezier.CalculatePoint(j)); colors.Add(Color4.White); vertexes.Add(screenOffset); } } colors.Add(colors.First()); vertexes.Add(vertexes.First()); Gizmos.DrawCustomShape(vertexes, colors, PrimitiveType.TriangleStrip); }