WuhuIslandTesting/Library/PackageCache/com.unity.splines@1.0.1/Editor/Utilities/SplineDataHandle.cs

89 lines
3.7 KiB
C#
Raw Normal View History

2025-01-07 02:06:59 +01:00
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Internal;
using UnityEngine.Splines;
namespace UnityEditor.Splines
{
[ExcludeFromDocs]
[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class CustomSplineDataHandle : Attribute
{
internal Type m_Type;
// Tells a PropertyDrawer class which run-time class or attribute it's a drawer for.
public CustomSplineDataHandle(Type type)
{
m_Type = type;
}
}
interface ISplineDataHandle
{
public SplineDataHandleAttribute attribute
{ get; }
void SetAttribute(SplineDataHandleAttribute attribute);
}
/// <summary>
/// SplineDataHandle is a base class to override in order to enable custom handles for spline data.
/// The Drawer needs to inherit from this class and override the method corresponding to the correct splineData type.
/// Either one of the method or both can be overriden regarding the user needs.
/// </summary>
/// <typeparam name="T">
/// The type parameter of the <see cref="SplineData{T}"/> that this drawer targets.
/// </typeparam>
public abstract class SplineDataHandle<T> : ISplineDataHandle
{
internal int[] m_ControlIDs;
SplineDataHandleAttribute m_Attribute;
[ExcludeFromDocs]
public SplineDataHandleAttribute attribute => m_Attribute;
/// <summary>
/// Array of reserved control IDs used for <see cref="SplineData{T}"/> handles.
/// </summary>
public int[] controlIDs => m_ControlIDs;
void ISplineDataHandle.SetAttribute(SplineDataHandleAttribute attribute)
{
m_Attribute = attribute;
}
/// <summary>
/// Override this method to create custom handles for <see cref="SplineData{T}"/>,
/// this method is called before DrawKeyframe in the render loop.
/// </summary>
/// <param name="splineData">The <see cref="SplineData{T}"/> for which the method is drawing handles.</param>
/// <param name="spline">The target Spline associated to the SplineData for the drawing.</param>
/// <param name="localToWorld">The spline localToWorld Matrix.</param>
/// <param name="color">The color defined in the SplineData scene interface.</param>
public virtual void DrawSplineData(SplineData<T> splineData, Spline spline, Matrix4x4 localToWorld, Color color)
{}
/// <summary>
/// Override this method to create custom handles for a <see cref="DataPoint{T}"/>in <see cref="SplineData{T}"/>,
/// 'position' and 'direction' are given in the Spline-space basis.
/// This method is called after DrawSplineData in the render loop.
/// </summary>
/// <param name="controlID">A control ID from <see cref="controlIDs"/> that represents this handle.</param>
/// <param name="position">The position of the keyframe data in spline space.</param>
/// <param name="direction">The direction of the spline at the current keyframe.</param>
/// <param name="upDirection">The up vector orthogonal to the spline direction at the current keyframe regarding knot rotation.</param>
/// <param name="splineData">The <see cref="SplineData{T}"/> for which the method is drawing handles.</param>
/// <param name="dataPointIndex">The index of the current keyframe to handle.</param>
public virtual void DrawDataPoint(
int controlID,
Vector3 position,
Vector3 direction,
Vector3 upDirection,
SplineData<T> splineData,
int dataPointIndex)
{}
}
}