private static void DrawMountedRigGizmos(MountedCameraRig rig, GizmoType gizmoType)
        {
            Transform rigCenter             = (rig.FollowVehicleViewTransform ?? rig.FollowVehicle?.transform) ?? rig.transform;
            Vector3   offsetFromTrackCenter = (Vector3.right * rig.FollowVehicle?.Controller?.ClosestPathDistanceToPoint) ?? Vector3.zero;

            // Align gizmos with rig transform by moving to local space.
            Matrix4x4 originalMatrix = Handles.matrix;

            Handles.matrix = rigCenter.localToWorldMatrix;

            // Rig car.
            DrawTargetingGizmos(Vector3.zero, offsetFromTrackCenter, rig);
            DrawCarGizmos(Vector3.zero, rigCenter.up, rigCenter.right, AZURE);

            // Lookat target.
            if (rig.LookAtVehicle != null && rig.FollowVehicle != null && Application.isPlaying)
            {
                Vector3 relativeLookAtPosition = TrackHelper.GetRelativePosition3D(rig.LookAtVehicle, rig.FollowVehicle);
                Handles.color = Color.white;
                Handles.DrawDottedLine(Vector3.zero, relativeLookAtPosition, DOT_SIZE);
                DrawCarGizmos(relativeLookAtPosition, rigCenter.transform.up, rigCenter.transform.right, Color.white);
            }

            Handles.matrix = originalMatrix;
        }
        private static void DrawTargetingGizmos(Vector3 rigCenter, Vector3 offsetFromTrackCenter, MountedCameraRig rig)
        {
            Vector3 trackCenter = rigCenter - offsetFromTrackCenter;

            Vector3 trackWidthOffset    = new Vector3(HALF_TRACK_WIDTH, 0, 0);
            Vector3 minDistanceOffset   = new Vector3(0, 0, rig.MinRelativeDistance);
            Vector3 idealDistanceOffset = new Vector3(0, 0, rig.IdealRelativeDistance);
            Vector3 maxDistanceOffset   = new Vector3(0, 0, rig.MaxRelativeDistance);

            // Distances.
            Handles.color = Color.yellow;
            DrawDistanceLines(trackCenter, minDistanceOffset, trackWidthOffset);
            Handles.color = Color.green;
            DrawDottedDistanceLines(trackCenter, idealDistanceOffset, trackWidthOffset, DOT_SIZE);
            Handles.color = Color.yellow;
            DrawDistanceLines(trackCenter, maxDistanceOffset, trackWidthOffset);

            // Track edges within targeting area.
            Vector3 frontRightCornerOffset = maxDistanceOffset + trackWidthOffset;
            Vector3 frontLeftCornerOffset  = maxDistanceOffset - trackWidthOffset;

            Handles.color = AZURE;
            Handles.DrawLine(trackCenter + frontRightCornerOffset, trackCenter - frontLeftCornerOffset);
            Handles.DrawLine(trackCenter + frontLeftCornerOffset, trackCenter - frontRightCornerOffset);
            // Track edges beyond max distance.
            Handles.DrawDottedLine(trackCenter + frontRightCornerOffset, trackCenter + frontRightCornerOffset + Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE);
            Handles.DrawDottedLine(trackCenter + frontLeftCornerOffset, trackCenter + frontLeftCornerOffset + Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE);
            Handles.DrawDottedLine(trackCenter - frontRightCornerOffset, trackCenter - frontRightCornerOffset - Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE);
            Handles.DrawDottedLine(trackCenter - frontLeftCornerOffset, trackCenter - frontLeftCornerOffset - Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE);

            // Angle cull area.
            float   dotGizmoRadius = Mathf.Sqrt((rig.MaxRelativeDistance * rig.MaxRelativeDistance) + (HALF_TRACK_WIDTH * HALF_TRACK_WIDTH));
            float   cullArcAngle   = rig.CullAngle * 2f;
            Vector3 arcStartVector = Quaternion.Euler(0, -rig.CullAngle, 0) * Vector3.forward;

            Handles.color = TRANSLUCENT_YELLOW;
            DrawAngleArcs(rigCenter, arcStartVector, cullArcAngle, dotGizmoRadius);
            Handles.color = Color.yellow;
            DrawWireAngleArcs(rigCenter, arcStartVector, cullArcAngle, dotGizmoRadius);

            // Ideal angle.
            Vector3 idealDirection = Quaternion.Euler(0, -rig.IdealAngle, 0) * Vector3.forward;

            Handles.color = Color.green;
            DrawDottedAngleLines(rigCenter, idealDirection, dotGizmoRadius, DOT_SIZE);
            DrawDottedAngleLines(rigCenter, -idealDirection, dotGizmoRadius, DOT_SIZE);

            // Ideal car positions.
            Vector3 idealCarPosition          = new Vector3(idealDirection.x / idealDirection.z * rig.IdealRelativeDistance, 0, rig.IdealRelativeDistance);
            Vector3 reflectedIdealCarPosition = Vector3.Reflect(-idealCarPosition, Vector3.forward);

            DrawCarGizmos(rigCenter + idealCarPosition, Vector3.up, Vector3.right, Color.green);
            DrawCarGizmos(rigCenter + reflectedIdealCarPosition, Vector3.up, Vector3.right, Color.green);
            DrawCarGizmos(rigCenter - idealCarPosition, Vector3.up, Vector3.right, Color.green);
            DrawCarGizmos(rigCenter - reflectedIdealCarPosition, Vector3.up, Vector3.right, Color.green);
        }