summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Activation/ActivationTrackEditor.cs
blob: a7552f1ed288e87d4af5e2e1cb92e2a9b8c16989 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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 = LocalizationDatabase.GetLocalizedString("Active");

        static readonly string k_ErrorParentString = LocalizationDatabase.GetLocalizedString("The bound GameObject is a parent of the PlayableDirector.");
        static readonly string k_ErrorString = LocalizationDatabase.GetLocalizedString("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);
            }
        }
    }
}