summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Window/TimelineWindow_ActiveTimeline.cs
blob: 004209fea63aab54cf3b31ef45548dee0b6f07af (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;

namespace UnityEditor.Timeline
{
    partial class TimelineWindow
    {
        private TimelineAsset m_PreviousMasterSequence;

        public void ClearCurrentTimeline()
        {
            SetCurrentTimeline(null, null, null, true);
        }

        public void SetCurrentTimeline(TimelineAsset seq)
        {
            SetCurrentTimeline(seq, null, null);
        }

        public void SetCurrentTimeline(PlayableDirector director, TimelineClip hostClip = null)
        {
            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();
            }
        }
    }
}