A game about forced loneliness, made by TACStudios
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}