private static void DrawArrowOnCircleDeg(Vector3 centerPosition, float arrowAngleDeg, float rotationDir, float circleRadius, Vector3 up, Color wireframe, float offsetZ = -1, float arrowSize = 0.05f)
        {
            Vector3 cp  = ParametricCircle.GetPointOnCircleDeg(Vector2.zero, arrowAngleDeg, circleRadius);
            Vector3 p   = cp + centerPosition + new Vector3(0, 0, offsetZ);
            Vector3 dir = Mathf.Sign(rotationDir) * Vector3.Cross(up.normalized, cp.normalized);

            DrawArrowHead(p, dir, up, wireframe, arrowSize);
        }
        public static void DrawCirclePartRad(Vector2 p, float startA, float endA, float r, Color lineColor, int lineResolutionForCircle = 360, float offsetZ = -1)
        {
            Gizmos.color = lineColor;

            float aStep = (2 * Mathf.PI) / lineResolutionForCircle;

            if (startA > endA)
            {
                float swap = startA;
                startA = endA;
                endA   = swap;
            }

            for (float a = startA; a < endA; a += aStep)
            {
                Vector3 p1 = (Vector3)ParametricCircle.GetPointOnCircleRad(p, a, r) + new Vector3(0, 0, offsetZ);
                Vector3 p2 = (Vector3)ParametricCircle.GetPointOnCircleRad(p, a + aStep, r) + new Vector3(0, 0, offsetZ);
                Gizmos.DrawLine(p1, p2);
            }
        }