WuhuIslandTesting/Library/PackageCache/com.unity.splines@1.0.1/Editor/Tools/SplineRotateTool.cs
2025-01-07 02:06:59 +01:00

62 lines
2.3 KiB
C#

using UnityEngine;
using UnityEditor.EditorTools;
using UnityEditor.Overlays;
using UnityEngine.Splines;
namespace UnityEditor.Splines
{
[CustomEditor(typeof(SplineRotateTool))]
class SplineRotateToolSettings : SplineToolSettings { }
#if UNITY_2021_2_OR_NEWER
[EditorTool("Spline Rotate", typeof(ISplineProvider), typeof(SplineToolContext))]
#else
[EditorTool("Spline Rotate", typeof(ISplineProvider))]
#endif
sealed class SplineRotateTool : SplineTool
{
public override GUIContent toolbarIcon => PathIcons.splineRotateTool;
internal override SplineHandlesOptions handlesOptions => SplineHandlesOptions.ManipulationDefault;
Quaternion m_CurrentRotation = Quaternion.identity;
Vector3 m_RotationCenter = Vector3.zero;
public override void OnToolGUI(EditorWindow window)
{
if (Event.current.type == EventType.MouseDrag)
{
if (handleOrientation == HandleOrientation.Element || handleOrientation == HandleOrientation.Parent)
TransformOperation.pivotFreeze |= TransformOperation.PivotFreeze.Rotation;
}
if (Event.current.type == EventType.MouseUp)
{
TransformOperation.pivotFreeze = TransformOperation.PivotFreeze.None;
TransformOperation.UpdateHandleRotation();
}
if (Event.current.type == EventType.Layout)
TransformOperation.UpdatePivotPosition(true);
if(TransformOperation.canManipulate)
{
EditorGUI.BeginChangeCheck();
var rotation = Handles.DoRotationHandle(m_CurrentRotation, m_RotationCenter);
if(EditorGUI.EndChangeCheck())
{
TransformOperation.ApplyRotation(rotation * Quaternion.Inverse(m_CurrentRotation), m_RotationCenter);
m_CurrentRotation = rotation;
}
if(GUIUtility.hotControl == 0)
{
TransformOperation.UpdateHandleRotation();
m_CurrentRotation = TransformOperation.handleRotation;
m_RotationCenter = TransformOperation.pivotPosition;
}
}
SplineConversionUtility.ApplyEditableSplinesIfDirty(targets);
}
}
}