You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
5.0 KiB
151 lines
5.0 KiB
using System.Collections.Generic; |
|
using System.Linq; |
|
using JetBrains.Annotations; |
|
using UnityEditor.Timeline.Actions; |
|
using UnityEngine; |
|
using UnityEngine.Timeline; |
|
|
|
namespace UnityEditor.Timeline |
|
{ |
|
[MenuEntry("Add Override Track", MenuPriority.CustomTrackActionSection.addOverrideTrack), UsedImplicitly] |
|
class AddOverrideTrackAction : TrackAction |
|
{ |
|
public override bool Execute(IEnumerable<TrackAsset> tracks) |
|
{ |
|
foreach (var animTrack in tracks.OfType<AnimationTrack>()) |
|
{ |
|
TimelineHelpers.CreateTrack(typeof(AnimationTrack), animTrack, "Override " + animTrack.GetChildTracks().Count()); |
|
} |
|
|
|
return true; |
|
} |
|
|
|
public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) |
|
{ |
|
if (tracks.Any(t => t.isSubTrack || !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) |
|
return ActionValidity.NotApplicable; |
|
|
|
if (tracks.Any(t => t.lockedInHierarchy)) |
|
return ActionValidity.Invalid; |
|
|
|
return ActionValidity.Valid; |
|
} |
|
} |
|
|
|
[MenuEntry("Convert To Clip Track", MenuPriority.CustomTrackActionSection.convertToClipMode), UsedImplicitly] |
|
class ConvertToClipModeAction : TrackAction |
|
{ |
|
public override bool Execute(IEnumerable<TrackAsset> tracks) |
|
{ |
|
foreach (var animTrack in tracks.OfType<AnimationTrack>()) |
|
animTrack.ConvertToClipMode(); |
|
|
|
TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved); |
|
|
|
return true; |
|
} |
|
|
|
public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) |
|
{ |
|
if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) |
|
return ActionValidity.NotApplicable; |
|
|
|
if (tracks.Any(t => t.lockedInHierarchy)) |
|
return ActionValidity.Invalid; |
|
|
|
if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertToClipMode())) |
|
return ActionValidity.Valid; |
|
|
|
return ActionValidity.NotApplicable; |
|
} |
|
} |
|
|
|
[MenuEntry("Convert To Infinite Clip", MenuPriority.CustomTrackActionSection.convertFromClipMode), UsedImplicitly] |
|
class ConvertFromClipTrackAction : TrackAction |
|
{ |
|
public override bool Execute(IEnumerable<TrackAsset> tracks) |
|
{ |
|
foreach (var animTrack in tracks.OfType<AnimationTrack>()) |
|
animTrack.ConvertFromClipMode(TimelineEditor.inspectedAsset); |
|
|
|
TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved); |
|
|
|
return true; |
|
} |
|
|
|
public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) |
|
{ |
|
if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) |
|
return ActionValidity.NotApplicable; |
|
|
|
if (tracks.Any(t => t.lockedInHierarchy)) |
|
return ActionValidity.Invalid; |
|
|
|
if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertFromClipMode())) |
|
return ActionValidity.Valid; |
|
|
|
return ActionValidity.NotApplicable; |
|
} |
|
} |
|
|
|
abstract class TrackOffsetBaseAction : TrackAction |
|
{ |
|
public abstract TrackOffset trackOffset { get; } |
|
|
|
public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) |
|
{ |
|
if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) |
|
return ActionValidity.NotApplicable; |
|
|
|
if (tracks.Any(t => t.lockedInHierarchy)) |
|
{ |
|
return ActionValidity.Invalid; |
|
} |
|
|
|
return ActionValidity.Valid; |
|
} |
|
|
|
public override bool Execute(IEnumerable<TrackAsset> tracks) |
|
{ |
|
foreach (var animTrack in tracks.OfType<AnimationTrack>()) |
|
{ |
|
animTrack.UnarmForRecord(); |
|
animTrack.trackOffset = trackOffset; |
|
} |
|
|
|
TimelineEditor.Refresh(RefreshReason.ContentsModified); |
|
return true; |
|
} |
|
} |
|
|
|
|
|
[MenuEntry("Track Offsets/Apply Transform Offsets", MenuPriority.CustomTrackActionSection.applyTrackOffset), UsedImplicitly] |
|
[ApplyDefaultUndo] |
|
class ApplyTransformOffsetAction : TrackOffsetBaseAction |
|
{ |
|
public override TrackOffset trackOffset |
|
{ |
|
get { return TrackOffset.ApplyTransformOffsets; } |
|
} |
|
} |
|
|
|
[MenuEntry("Track Offsets/Apply Scene Offsets", MenuPriority.CustomTrackActionSection.applySceneOffset), UsedImplicitly] |
|
[ApplyDefaultUndo] |
|
class ApplySceneOffsetAction : TrackOffsetBaseAction |
|
{ |
|
public override TrackOffset trackOffset |
|
{ |
|
get { return TrackOffset.ApplySceneOffsets; } |
|
} |
|
} |
|
|
|
[MenuEntry("Track Offsets/Auto (Deprecated)", MenuPriority.CustomTrackActionSection.applyAutoOffset), UsedImplicitly] |
|
[ApplyDefaultUndo] |
|
class ApplyAutoAction : TrackOffsetBaseAction |
|
{ |
|
public override TrackOffset trackOffset |
|
{ |
|
get { return TrackOffset.Auto; } |
|
} |
|
} |
|
}
|
|
|