88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using UnityEngine;
 | |
| using UnityEngine.Playables;
 | |
| using UnityEngine.Timeline;
 | |
| 
 | |
| namespace UnityEditor.Timeline
 | |
| {
 | |
|     partial class TimelineWindow
 | |
|     {
 | |
|         private TimelineAsset m_PreviousMasterSequence;
 | |
| 
 | |
|         public override void ClearTimeline()
 | |
|         {
 | |
|             SetCurrentTimeline(null, null, null, true);
 | |
|         }
 | |
| 
 | |
|         public override void SetTimeline(TimelineAsset seq)
 | |
|         {
 | |
|             SetCurrentTimeline(seq, null, null);
 | |
|         }
 | |
| 
 | |
|         public override void SetTimeline(PlayableDirector director)
 | |
|         {
 | |
|             SetCurrentTimeline(director, null);
 | |
|         }
 | |
| 
 | |
|         public void SetCurrentTimeline(PlayableDirector director, TimelineClip hostClip)
 | |
|         {
 | |
|             var asset = director != null ? director.playableAsset as TimelineAsset : null;
 | |
|             SetCurrentTimeline(asset, director, hostClip);
 | |
|         }
 | |
| 
 | |
|         void SetCurrentTimeline(TimelineAsset seq, PlayableDirector instanceOfDirector, TimelineClip hostClip, bool force = false)
 | |
|         {
 | |
|             if (state == null)
 | |
|                 return;
 | |
| 
 | |
|             if (!force &&
 | |
|                 state.editSequence.hostClip == hostClip &&
 | |
|                 state.editSequence.director == instanceOfDirector &&
 | |
|                 state.editSequence.asset == seq)
 | |
|                 return;
 | |
| 
 | |
|             state.SetCurrentSequence(seq, instanceOfDirector, hostClip);
 | |
|         }
 | |
| 
 | |
|         void OnBeforeSequenceChange()
 | |
|         {
 | |
|             treeView = null;
 | |
|             m_MarkerHeaderGUI = null;
 | |
|             m_TimeAreaDirty = true;
 | |
| 
 | |
|             state.Reset();
 | |
|             m_PlayableLookup.ClearPlayableLookup();
 | |
| 
 | |
|             // clear old editors to caches, like audio previews, get flushed
 | |
|             CustomTimelineEditorCache.ClearCache<ClipEditor>();
 | |
|             CustomTimelineEditorCache.ClearCache<MarkerEditor>();
 | |
|             CustomTimelineEditorCache.ClearCache<TrackEditor>();
 | |
| 
 | |
|             m_PreviousMasterSequence = state.masterSequence.asset;
 | |
|         }
 | |
| 
 | |
|         void OnAfterSequenceChange()
 | |
|         {
 | |
|             Repaint();
 | |
| 
 | |
|             m_SequencePath = state.GetCurrentSequencePath();
 | |
| 
 | |
|             m_LastFrameHadSequence = state.editSequence.asset != null;
 | |
|             TimelineWindowViewPrefs.SaveAll();
 | |
| 
 | |
|             // this prevent clearing the animation window when going in/out of playmode, but
 | |
|             // clears it when we switch master timelines
 | |
|             // the cast to a object will handle the case where the sequence has been deleted.
 | |
|             object previousMasterSequence = m_PreviousMasterSequence;
 | |
|             bool isDeleted = previousMasterSequence != null && m_PreviousMasterSequence == null;
 | |
|             bool hasChanged = m_PreviousMasterSequence != null && m_PreviousMasterSequence != state.masterSequence.asset;
 | |
|             if (isDeleted || hasChanged)
 | |
|             {
 | |
|                 AnimationClipCurveCache.Instance.Clear();
 | |
|                 TimelineAnimationUtilities.UnlinkAnimationWindow();
 | |
| 
 | |
|                 state.analytics.SendAfterSequenceChangeEvent(); // Changing timelines resets analytics that are aggregated in the Timeline Window
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |