A game about forced loneliness, made by TACStudios
at master 184 lines 5.8 kB view raw
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}