52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using UnityEditor.Timeline;
|
|
using UnityEngine.Timeline;
|
|
|
|
namespace AibisDream.FrameAnimation.Timeline.Editor
|
|
{
|
|
[CustomTimelineEditor(typeof(FrameAnimationTimelineClip))]
|
|
internal sealed class FrameAnimationTimelineClipEditor : ClipEditor
|
|
{
|
|
public override void OnCreate(TimelineClip clip, TrackAsset track, TimelineClip clonedFrom)
|
|
{
|
|
base.OnCreate(clip, track, clonedFrom);
|
|
SynchronizeSource(clip);
|
|
}
|
|
|
|
public override void OnClipChanged(TimelineClip clip)
|
|
{
|
|
base.OnClipChanged(clip);
|
|
SynchronizeSource(clip);
|
|
}
|
|
|
|
public override ClipDrawOptions GetClipOptions(TimelineClip clip)
|
|
{
|
|
var options = base.GetClipOptions(clip);
|
|
if (clip?.asset is not FrameAnimationTimelineClip asset)
|
|
{
|
|
return options;
|
|
}
|
|
|
|
if (asset.FrameClip == null)
|
|
{
|
|
options.errorText = "未指定 FrameClip";
|
|
}
|
|
return options;
|
|
}
|
|
|
|
private static void SynchronizeSource(TimelineClip clip)
|
|
{
|
|
if (clip?.asset is not FrameAnimationTimelineClip asset ||
|
|
!asset.TrySynchronizeSourceDuration(out var duration))
|
|
{
|
|
return;
|
|
}
|
|
|
|
clip.duration = duration;
|
|
clip.displayName = asset.FrameClip != null &&
|
|
!string.IsNullOrEmpty(asset.FrameClip.DisplayName)
|
|
? asset.FrameClip.DisplayName
|
|
: "Frame Animation Clip";
|
|
}
|
|
}
|
|
}
|