A game about forced loneliness, made by TACStudios
at master 151 lines 5.1 kB view raw
1using System.Collections.Generic; 2using System.Linq; 3using JetBrains.Annotations; 4using UnityEditor.Timeline.Actions; 5using UnityEngine; 6using UnityEngine.Timeline; 7 8namespace UnityEditor.Timeline 9{ 10 [MenuEntry("Add Override Track", MenuPriority.CustomTrackActionSection.addOverrideTrack), UsedImplicitly] 11 class AddOverrideTrackAction : TrackAction 12 { 13 public override bool Execute(IEnumerable<TrackAsset> tracks) 14 { 15 foreach (var animTrack in tracks.OfType<AnimationTrack>()) 16 { 17 TimelineHelpers.CreateTrack(typeof(AnimationTrack), animTrack, "Override " + animTrack.GetChildTracks().Count()); 18 } 19 20 return true; 21 } 22 23 public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) 24 { 25 if (tracks.Any(t => t.isSubTrack || !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) 26 return ActionValidity.NotApplicable; 27 28 if (tracks.Any(t => t.lockedInHierarchy)) 29 return ActionValidity.Invalid; 30 31 return ActionValidity.Valid; 32 } 33 } 34 35 [MenuEntry("Convert To Clip Track", MenuPriority.CustomTrackActionSection.convertToClipMode), UsedImplicitly] 36 class ConvertToClipModeAction : TrackAction 37 { 38 public override bool Execute(IEnumerable<TrackAsset> tracks) 39 { 40 foreach (var animTrack in tracks.OfType<AnimationTrack>()) 41 animTrack.ConvertToClipMode(); 42 43 TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved); 44 45 return true; 46 } 47 48 public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) 49 { 50 if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) 51 return ActionValidity.NotApplicable; 52 53 if (tracks.Any(t => t.lockedInHierarchy)) 54 return ActionValidity.Invalid; 55 56 if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertToClipMode())) 57 return ActionValidity.Valid; 58 59 return ActionValidity.NotApplicable; 60 } 61 } 62 63 [MenuEntry("Convert To Infinite Clip", MenuPriority.CustomTrackActionSection.convertFromClipMode), UsedImplicitly] 64 class ConvertFromClipTrackAction : TrackAction 65 { 66 public override bool Execute(IEnumerable<TrackAsset> tracks) 67 { 68 foreach (var animTrack in tracks.OfType<AnimationTrack>()) 69 animTrack.ConvertFromClipMode(TimelineEditor.inspectedAsset); 70 71 TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved); 72 73 return true; 74 } 75 76 public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) 77 { 78 if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) 79 return ActionValidity.NotApplicable; 80 81 if (tracks.Any(t => t.lockedInHierarchy)) 82 return ActionValidity.Invalid; 83 84 if (tracks.OfType<AnimationTrack>().All(a => a.CanConvertFromClipMode())) 85 return ActionValidity.Valid; 86 87 return ActionValidity.NotApplicable; 88 } 89 } 90 91 abstract class TrackOffsetBaseAction : TrackAction 92 { 93 public abstract TrackOffset trackOffset { get; } 94 95 public override ActionValidity Validate(IEnumerable<TrackAsset> tracks) 96 { 97 if (tracks.Any(t => !t.GetType().IsAssignableFrom(typeof(AnimationTrack)))) 98 return ActionValidity.NotApplicable; 99 100 if (tracks.Any(t => t.lockedInHierarchy)) 101 { 102 return ActionValidity.Invalid; 103 } 104 105 return ActionValidity.Valid; 106 } 107 108 public override bool Execute(IEnumerable<TrackAsset> tracks) 109 { 110 foreach (var animTrack in tracks.OfType<AnimationTrack>()) 111 { 112 animTrack.UnarmForRecord(); 113 animTrack.trackOffset = trackOffset; 114 } 115 116 TimelineEditor.Refresh(RefreshReason.ContentsModified); 117 return true; 118 } 119 } 120 121 122 [MenuEntry("Track Offsets/Apply Transform Offsets", MenuPriority.CustomTrackActionSection.applyTrackOffset), UsedImplicitly] 123 [ApplyDefaultUndo] 124 class ApplyTransformOffsetAction : TrackOffsetBaseAction 125 { 126 public override TrackOffset trackOffset 127 { 128 get { return TrackOffset.ApplyTransformOffsets; } 129 } 130 } 131 132 [MenuEntry("Track Offsets/Apply Scene Offsets", MenuPriority.CustomTrackActionSection.applySceneOffset), UsedImplicitly] 133 [ApplyDefaultUndo] 134 class ApplySceneOffsetAction : TrackOffsetBaseAction 135 { 136 public override TrackOffset trackOffset 137 { 138 get { return TrackOffset.ApplySceneOffsets; } 139 } 140 } 141 142 [MenuEntry("Track Offsets/Auto (Deprecated)", MenuPriority.CustomTrackActionSection.applyAutoOffset), UsedImplicitly] 143 [ApplyDefaultUndo] 144 class ApplyAutoAction : TrackOffsetBaseAction 145 { 146 public override TrackOffset trackOffset 147 { 148 get { return TrackOffset.Auto; } 149 } 150 } 151}