RoboticArms/Library/PackageCache/com.unity.splines@d3e1e500c9a0/Editor/Tools/CreateSplineTool.cs
2025-11-17 15:16:36 +07:00

98 lines
3.0 KiB
C#

using UnityEngine;
using UnityEditor.EditorTools;
using UnityEngine.Splines;
using Unity.Mathematics;
using System.Collections.Generic;
using System;
using UnityEditor.Overlays;
using Object = UnityEngine.Object;
namespace UnityEditor.Splines
{
[CustomEditor(typeof(CreateSplineTool))]
#if UNITY_2022_1_OR_NEWER
class CreateSplineToolSettings : UnityEditor.Editor, ICreateToolbar
{
public IEnumerable<string> toolbarElements
{
#else
class CreateSplineToolSettings : CreateToolbarBase
{
protected override IEnumerable<string> toolbarElements
{
#endif
get { yield return "Spline Tool Settings/Default Knot Type"; }
}
}
#if UNITY_2023_1_OR_NEWER
[EditorTool("Create Spline", toolPriority = 10)]
#else
[EditorTool("Create Spline")]
#endif
[Icon("Packages/com.unity.splines/Editor/Resources/Icons/KnotPlacementTool.png")]
class CreateSplineTool : KnotPlacementTool
{
[NonSerialized]
List<Object> m_Targets = new List<Object>(1);
protected override void AddKnotOnSurface(float3 position, float3 normal, float3 tangentOut)
{
if (MainTarget == null)
{
var gameObject = SplineMenu.CreateSplineGameObject(new MenuCommand(null));
gameObject.transform.localPosition = Vector3.zero;
gameObject.transform.localRotation = Quaternion.identity;
MainTarget = gameObject.GetComponent<SplineContainer>();
Selection.activeGameObject = gameObject;
EditorSplineGizmos.showSelectedGizmo = false;
// Set hasChanged to false as we don't want to override a custom transform set by the user.
gameObject.transform.hasChanged = false;
}
base.AddKnotOnSurface(position, normal, tangentOut);
}
public override void OnActivated()
{
base.OnActivated();
// Enable the gizmo drawing of the selected object because we aren't drawing using handles
EditorSplineGizmos.showSelectedGizmo = true;
}
public override void OnWillBeDeactivated()
{
EditorSplineGizmos.showSelectedGizmo = false;
base.OnWillBeDeactivated();
}
void UpdateTargets()
{
m_Targets.Clear();
if (ToolManager.activeContextType == typeof(SplineToolContext))
{
m_Targets.AddRange(SplineToolContext.GetTargets());
MainTarget = m_Targets[0] as Component;
}
else if (MainTarget != null)
m_Targets.Add(MainTarget);
}
protected override IEnumerable<Object> GetTargets()
{
UpdateTargets();
return m_Targets;
}
protected override IReadOnlyList<Object> GetSortedTargets(out Object mainTarget)
{
UpdateTargets();
mainTarget = MainTarget;
return m_Targets;
}
}
}