| using System; |
| using UnityEngine; |
| using UnityEngine.Timeline; |
| using UnityEngine.Playables; |
|
|
| namespace UnityEngine.Timeline |
| { |
| |
| |
| |
| public static class TrackAssetExtensions |
| { |
| |
| |
| |
| |
| |
| public static GroupTrack GetGroup(this TrackAsset asset) |
| { |
| if (asset == null) |
| return null; |
|
|
| return asset.parent as GroupTrack; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public static void SetGroup(this TrackAsset asset, GroupTrack group) |
| { |
| const string undoString = "Reparent"; |
|
|
| if (asset == null || asset == group || asset.parent == group) |
| return; |
|
|
| if (group != null && asset.timelineAsset != group.timelineAsset) |
| throw new InvalidOperationException("Cannot assign to a group in a different timeline"); |
|
|
|
|
| TimelineUndo.PushUndo(asset, undoString); |
|
|
| var timeline = asset.timelineAsset; |
| var parentTrack = asset.parent as TrackAsset; |
| var parentTimeline = asset.parent as TimelineAsset; |
| if (parentTrack != null || parentTimeline != null) |
| { |
| TimelineUndo.PushUndo(asset.parent, undoString); |
| if (parentTimeline != null) |
| { |
| parentTimeline.RemoveTrack(asset); |
| } |
| else |
| { |
| parentTrack.RemoveSubTrack(asset); |
| } |
| } |
|
|
| if (group == null) |
| { |
| TimelineUndo.PushUndo(timeline, undoString); |
| asset.parent = asset.timelineAsset; |
| timeline.AddTrackInternal(asset); |
| } |
| else |
| { |
| TimelineUndo.PushUndo(group, undoString); |
| group.AddChild(asset); |
| } |
| } |
| } |
| } |
|
|