57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using JetBrains.Annotations;
 | |
| using UnityEngine;
 | |
| using UnityEngine.Timeline;
 | |
| using UnityEngine.Playables;
 | |
| 
 | |
| namespace UnityEditor.Timeline
 | |
| {
 | |
|     [UsedImplicitly]
 | |
|     [CustomTimelineEditor(typeof(ActivationTrack))]
 | |
|     class ActivationTrackEditor : TrackEditor
 | |
|     {
 | |
|         static readonly string ClipText = L10n.Tr("Active");
 | |
| 
 | |
|         static readonly string k_ErrorParentString = L10n.Tr("The bound GameObject is a parent of the PlayableDirector.");
 | |
|         static readonly string k_ErrorString = L10n.Tr("The bound GameObject contains the PlayableDirector.");
 | |
| 
 | |
|         public override TrackDrawOptions GetTrackOptions(TrackAsset track, Object binding)
 | |
|         {
 | |
|             var options = base.GetTrackOptions(track, binding);
 | |
|             options.errorText = GetErrorText(track, binding);
 | |
|             return options;
 | |
|         }
 | |
| 
 | |
|         string GetErrorText(TrackAsset track, Object binding)
 | |
|         {
 | |
|             var gameObject = binding as GameObject;
 | |
|             var currentDirector = TimelineEditor.inspectedDirector;
 | |
|             if (gameObject != null && currentDirector != null)
 | |
|             {
 | |
|                 var director = gameObject.GetComponent<PlayableDirector>();
 | |
|                 if (currentDirector == director)
 | |
|                 {
 | |
|                     return k_ErrorString;
 | |
|                 }
 | |
| 
 | |
|                 if (currentDirector.gameObject.transform.IsChildOf(gameObject.transform))
 | |
|                 {
 | |
|                     return k_ErrorParentString;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return base.GetErrorText(track, binding, TrackBindingErrors.PrefabBound);
 | |
|         }
 | |
| 
 | |
|         public override void OnCreate(TrackAsset track, TrackAsset copiedFrom)
 | |
|         {
 | |
|             // Add a default clip to the newly created track
 | |
|             if (copiedFrom == null)
 | |
|             {
 | |
|                 var clip = track.CreateClip(0);
 | |
|                 clip.displayName = ClipText;
 | |
|                 clip.duration = System.Math.Max(clip.duration, track.timelineAsset.duration * 0.5f);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |