88 lines
3.7 KiB
C#
88 lines
3.7 KiB
C#
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)
|
|
{}
|
|
}
|
|
}
|