80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using UnityEngine.Playables;
 | |
| using UnityEngine.Timeline;
 | |
| 
 | |
| namespace UnityEditor.Timeline
 | |
| {
 | |
|     partial class TimelineWindow
 | |
|     {
 | |
|         PlayableLookup m_PlayableLookup = new PlayableLookup();
 | |
| 
 | |
|         class PlayableLookup
 | |
|         {
 | |
|             const int k_InitialDictionarySize = 10;
 | |
| 
 | |
|             readonly Dictionary<AnimationClip, Playable> m_AnimationClipToPlayable =
 | |
|                 new Dictionary<AnimationClip, Playable>(k_InitialDictionarySize);
 | |
|             readonly Dictionary<AnimationClip, TimelineClip> m_AnimationClipToTimelineClip =
 | |
|                 new Dictionary<AnimationClip, TimelineClip>(k_InitialDictionarySize);
 | |
| 
 | |
|             public void UpdatePlayableLookup(TimelineClip clip, GameObject go, Playable p)
 | |
|             {
 | |
|                 if (clip == null || go == null || !p.IsValid())
 | |
|                     return;
 | |
| 
 | |
|                 if (clip.curves != null)
 | |
|                     m_AnimationClipToTimelineClip[clip.curves] = clip;
 | |
| 
 | |
|                 UpdatePlayableLookup(clip.GetParentTrack().timelineAsset, clip, go, p);
 | |
|             }
 | |
| 
 | |
|             public void UpdatePlayableLookup(TrackAsset track, GameObject go, Playable p)
 | |
|             {
 | |
|                 if (track == null || go == null || !p.IsValid())
 | |
|                     return;
 | |
| 
 | |
|                 UpdatePlayableLookup(track.timelineAsset, track, go, p);
 | |
|             }
 | |
| 
 | |
|             void UpdatePlayableLookup(TimelineAsset timelineAsset, ICurvesOwner curvesOwner, GameObject go, Playable p)
 | |
|             {
 | |
|                 var director = go.GetComponent<PlayableDirector>();
 | |
|                 var editingDirector = instance.state.editSequence.director;
 | |
|                 // No Asset mode update
 | |
|                 if (curvesOwner.curves != null && director != null && director == editingDirector &&
 | |
|                     timelineAsset == instance.state.editSequence.asset)
 | |
|                 {
 | |
|                     m_AnimationClipToPlayable[curvesOwner.curves] = p;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             public bool GetPlayableFromAnimClip(AnimationClip clip, out Playable p)
 | |
|             {
 | |
|                 if (clip == null)
 | |
|                 {
 | |
|                     p = Playable.Null;
 | |
|                     return false;
 | |
|                 }
 | |
| 
 | |
|                 return m_AnimationClipToPlayable.TryGetValue(clip, out p);
 | |
|             }
 | |
| 
 | |
|             public TimelineClip GetTimelineClipFromCurves(AnimationClip clip)
 | |
|             {
 | |
|                 if (clip == null)
 | |
|                     return null;
 | |
| 
 | |
|                 TimelineClip timelineClip = null;
 | |
|                 m_AnimationClipToTimelineClip.TryGetValue(clip, out timelineClip);
 | |
|                 return timelineClip;
 | |
|             }
 | |
| 
 | |
|             public void ClearPlayableLookup()
 | |
|             {
 | |
|                 m_AnimationClipToPlayable.Clear();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |