public void OnDrawRuntimeGizmos(RuntimeGizmoDrawer drawer)
        {
            drawer.color = LeapColor.cyan;

            var rDelta = 0.008f;
            var dt     = Time.deltaTime;
            FailedPaintGizmo gizmo;

            for (int i = 0; i < _failedPaintGizmos.Count; i++)
            {
                gizmo = _failedPaintGizmos[i];

                gizmo.t += dt;
                if (gizmo.t > gizmo.duration)
                {
                    gizmo.t          = gizmo.duration;
                    gizmo.isFinished = true;
                }

                var progress = _curve.Evaluate(gizmo.t / gizmo.duration);
                drawer.color = drawer.color.WithAlpha(Mathf.Sin(progress * Mathf.PI));

                for (int j = 0; j < 3; j++)
                {
                    var r = Mathf.Lerp(gizmo.initRingSize, gizmo.finalRingSize, progress)
                            - rDelta * j;

                    if (r > 0f)
                    {
                        drawer.DrawWireArc(gizmo.position, gizmo.normal, gizmo.normal.Perpendicular(),
                                           r, 1f, 32);
                    }
                }
                drawer.DrawDashedLine(gizmo.position, gizmo.colliderPos, segmentsPerMeter: 128);

                _failedPaintGizmos[i] = gizmo;
            }

            _failedPaintGizmos.RemoveAll((g) => g.isFinished);
        }