using System;
using UnityEditor.SettingsManagement;
using UnityEngine;
using UnityEngine.Splines;
namespace UnityEditor.Splines
{
///
/// SplineGizmoUtility provides methods for drawing in-scene representations of Splines.
///
public static class SplineGizmoUtility
{
[UserSetting]
internal static UserSetting s_GizmosLineColor = new UserSetting(PathSettings.instance, "Gizmos.SplineColor", Color.blue, SettingsScope.User);
[UserSettingBlock("Gizmos")]
static void GizmosColorPreferences(string searchContext)
{
s_GizmosLineColor.value = SettingsGUILayout.SettingsColorField("Splines Color", s_GizmosLineColor, searchContext);
}
static readonly Color s_OutlineColor = new Color(0f, 0f, 0f, .5f);
///
/// Draw a line gizmo for a .
///
/// An object implementing the ISplineContainer interface. Usually this will be a MonoBehaviour.
public static void DrawGizmos(ISplineContainer container)
{
var splines = container.Splines;
if (splines == null)
return;
Gizmos.matrix = ((MonoBehaviour)container).transform.localToWorldMatrix;
foreach (var spline in splines)
{
if(spline == null || spline.Count < 2)
continue;
Vector3[] positions;
SplineCacheUtility.GetCachedPositions(spline, out positions);
#if UNITY_2023_1_OR_NEWER
Gizmos.DrawLineStrip(positions, false);
#else
for (int i = 1; i < positions.Length; ++i)
Gizmos.DrawLine(positions[i-1], positions[i]);
#endif
}
Gizmos.matrix = Matrix4x4.identity;
}
///
/// Draw a line gizmo for a .
///
/// An object implementing the ISplineProvider interface. Usually this will be a MonoBehaviour.
[Obsolete("Use the overload that uses " + nameof(ISplineContainer))]
public static void DrawGizmos(ISplineProvider provider)
{
var splines = provider.Splines;
if (splines == null)
return;
Gizmos.matrix = ((MonoBehaviour)provider).transform.localToWorldMatrix;
foreach (var spline in splines)
{
if (spline == null || spline.Count < 2)
continue;
Vector3[] positions;
SplineCacheUtility.GetCachedPositions(spline, out positions);
#if UNITY_2023_1_OR_NEWER
Gizmos.DrawLineStrip(positions, false);
#else
for (int i = 1; i < positions.Length; ++i)
Gizmos.DrawLine(positions[i-1], positions[i]);
#endif
}
Gizmos.matrix = Matrix4x4.identity;
}
}
}