A game about forced loneliness, made by TACStudios
1using UnityEngine;
2using UnityEngine.Timeline;
3using UnityObject = UnityEngine.Object;
4using ViewModelsMap = System.Collections.Generic.Dictionary<UnityEngine.Timeline.TimelineAsset, UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>;
5using ViewModelsList = System.Collections.Generic.List<UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>;
6
7namespace UnityEditor.Timeline
8{
9 static class TimelineWindowViewPrefs
10 {
11 public const string FilePath = "Library/Timeline";
12
13 static readonly ViewModelsMap k_ViewModelsMap = new ViewModelsMap();
14 static readonly ViewModelsList k_UnassociatedViewModels = new ViewModelsList();
15
16 public static int viewModelCount
17 {
18 get { return k_ViewModelsMap.Count + k_UnassociatedViewModels.Count; }
19 }
20
21 public static TimelineAssetViewModel GetOrCreateViewModel(TimelineAsset asset)
22 {
23 if (asset == null)
24 return CreateUnassociatedViewModel();
25
26 ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
27 if (k_ViewModelsMap.TryGetValue(asset, out vm))
28 return vm.viewModel;
29
30 return CreateViewModel(asset).viewModel;
31 }
32
33 public static TimelineAssetViewModel CreateUnassociatedViewModel()
34 {
35 var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(null, FilePath);
36 k_UnassociatedViewModels.Add(vm);
37 return vm.viewModel;
38 }
39
40 static ScriptableObjectViewPrefs<TimelineAssetViewModel> CreateViewModel(TimelineAsset asset)
41 {
42 var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(asset, FilePath);
43 k_ViewModelsMap.Add(asset, vm);
44 return vm;
45 }
46
47 public static void SaveViewModel(TimelineAsset asset)
48 {
49 if (asset == null)
50 return;
51
52 ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
53 if (!k_ViewModelsMap.TryGetValue(asset, out vm))
54 vm = CreateViewModel(asset);
55
56 vm.Save();
57 }
58
59 public static void SaveAll()
60 {
61 foreach (var kvp in k_ViewModelsMap)
62 kvp.Value.Save();
63 }
64
65 public static void UnloadViewModel(TimelineAsset asset)
66 {
67 ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
68 if (k_ViewModelsMap.TryGetValue(asset, out vm))
69 {
70 vm.Dispose();
71 k_ViewModelsMap.Remove(asset);
72 }
73 }
74
75 public static void UnloadAllViewModels()
76 {
77 foreach (var kvp in k_ViewModelsMap)
78 kvp.Value.Dispose();
79
80 foreach (var vm in k_UnassociatedViewModels)
81 vm.Dispose();
82
83 k_ViewModelsMap.Clear();
84 k_UnassociatedViewModels.Clear();
85 }
86
87 public static TrackViewModelData GetTrackViewModelData(TrackAsset track)
88 {
89 if (track == null)
90 return new TrackViewModelData();
91
92 if (track.timelineAsset == null)
93 return new TrackViewModelData();
94
95 var prefs = GetOrCreateViewModel(track.timelineAsset);
96
97 TrackViewModelData trackData;
98 if (prefs.tracksViewModelData.TryGetValue(track, out trackData))
99 {
100 return trackData;
101 }
102
103 trackData = new TrackViewModelData();
104 prefs.tracksViewModelData[track] = trackData;
105 return trackData;
106 }
107
108 public static bool IsTrackCollapsed(TrackAsset track)
109 {
110 if (track == null)
111 return true;
112
113 return GetTrackViewModelData(track).collapsed;
114 }
115
116 public static void SetTrackCollapsed(TrackAsset track, bool collapsed)
117 {
118 if (track == null)
119 return;
120
121 GetTrackViewModelData(track).collapsed = collapsed;
122 }
123
124 public static bool IsShowMarkers(TrackAsset track)
125 {
126 if (track == null)
127 return true;
128
129 return GetTrackViewModelData(track).showMarkers;
130 }
131
132 public static void SetTrackShowMarkers(TrackAsset track, bool collapsed)
133 {
134 if (track == null)
135 return;
136
137 GetTrackViewModelData(track).showMarkers = collapsed;
138 }
139
140 public static bool GetShowInlineCurves(TrackAsset track)
141 {
142 if (track == null)
143 return false;
144
145 return GetTrackViewModelData(track).showInlineCurves;
146 }
147
148 public static void SetShowInlineCurves(TrackAsset track, bool inlineOn)
149 {
150 if (track == null)
151 return;
152
153 GetTrackViewModelData(track).showInlineCurves = inlineOn;
154 }
155
156 public static float GetInlineCurveHeight(TrackAsset asset)
157 {
158 if (asset == null)
159 return TrackViewModelData.DefaultinlineAnimationCurveHeight;
160
161 return GetTrackViewModelData(asset).inlineAnimationCurveHeight;
162 }
163
164 public static void SetInlineCurveHeight(TrackAsset asset, float height)
165 {
166 if (asset != null)
167 GetTrackViewModelData(asset).inlineAnimationCurveHeight = height;
168 }
169
170 public static int GetTrackHeightExtension(TrackAsset asset)
171 {
172 if (asset == null)
173 return 0;
174
175 return GetTrackViewModelData(asset).trackHeightExtension;
176 }
177
178 public static void SetTrackHeightExtension(TrackAsset asset, int height)
179 {
180 if (asset != null)
181 GetTrackViewModelData(asset).trackHeightExtension = height;
182 }
183 }
184}