TimelineWindowViewPrefs.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. using UnityEngine;
  2. using UnityEngine.Timeline;
  3. using UnityObject = UnityEngine.Object;
  4. using ViewModelsMap = System.Collections.Generic.Dictionary<UnityEngine.Timeline.TimelineAsset, UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>;
  5. using ViewModelsList = System.Collections.Generic.List<UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>;
  6. namespace UnityEditor.Timeline
  7. {
  8. static class TimelineWindowViewPrefs
  9. {
  10. public const string FilePath = "Library/Timeline";
  11. static readonly ViewModelsMap k_ViewModelsMap = new ViewModelsMap();
  12. static readonly ViewModelsList k_UnassociatedViewModels = new ViewModelsList();
  13. public static int viewModelCount
  14. {
  15. get { return k_ViewModelsMap.Count + k_UnassociatedViewModels.Count; }
  16. }
  17. public static TimelineAssetViewModel GetOrCreateViewModel(TimelineAsset asset)
  18. {
  19. if (asset == null)
  20. return CreateUnassociatedViewModel();
  21. ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
  22. if (k_ViewModelsMap.TryGetValue(asset, out vm))
  23. return vm.viewModel;
  24. return CreateViewModel(asset).viewModel;
  25. }
  26. public static TimelineAssetViewModel CreateUnassociatedViewModel()
  27. {
  28. var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(null, FilePath);
  29. k_UnassociatedViewModels.Add(vm);
  30. return vm.viewModel;
  31. }
  32. static ScriptableObjectViewPrefs<TimelineAssetViewModel> CreateViewModel(TimelineAsset asset)
  33. {
  34. var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(asset, FilePath);
  35. k_ViewModelsMap.Add(asset, vm);
  36. return vm;
  37. }
  38. public static void SaveViewModel(TimelineAsset asset)
  39. {
  40. if (asset == null)
  41. return;
  42. ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
  43. if (!k_ViewModelsMap.TryGetValue(asset, out vm))
  44. vm = CreateViewModel(asset);
  45. vm.Save();
  46. }
  47. public static void SaveAll()
  48. {
  49. foreach (var kvp in k_ViewModelsMap)
  50. kvp.Value.Save();
  51. }
  52. public static void UnloadViewModel(TimelineAsset asset)
  53. {
  54. ScriptableObjectViewPrefs<TimelineAssetViewModel> vm;
  55. if (k_ViewModelsMap.TryGetValue(asset, out vm))
  56. {
  57. vm.Dispose();
  58. k_ViewModelsMap.Remove(asset);
  59. }
  60. }
  61. public static void UnloadAllViewModels()
  62. {
  63. foreach (var kvp in k_ViewModelsMap)
  64. kvp.Value.Dispose();
  65. foreach (var vm in k_UnassociatedViewModels)
  66. vm.Dispose();
  67. k_ViewModelsMap.Clear();
  68. k_UnassociatedViewModels.Clear();
  69. }
  70. public static TrackViewModelData GetTrackViewModelData(TrackAsset track)
  71. {
  72. Debug.Assert(track != null);
  73. if (track == null)
  74. return new TrackViewModelData();
  75. Debug.Assert(track.timelineAsset != null);
  76. if (track.timelineAsset == null)
  77. return new TrackViewModelData();
  78. var prefs = GetOrCreateViewModel(track.timelineAsset);
  79. TrackViewModelData trackData;
  80. if (prefs.tracksViewModelData.TryGetValue(track, out trackData))
  81. {
  82. return trackData;
  83. }
  84. trackData = new TrackViewModelData();
  85. prefs.tracksViewModelData[track] = trackData;
  86. return trackData;
  87. }
  88. public static bool IsTrackCollapsed(TrackAsset track)
  89. {
  90. if (track == null)
  91. return true;
  92. return GetTrackViewModelData(track).collapsed;
  93. }
  94. public static void SetTrackCollapsed(TrackAsset track, bool collapsed)
  95. {
  96. if (track == null)
  97. return;
  98. GetTrackViewModelData(track).collapsed = collapsed;
  99. }
  100. public static bool IsShowMarkers(TrackAsset track)
  101. {
  102. if (track == null)
  103. return true;
  104. return GetTrackViewModelData(track).showMarkers;
  105. }
  106. public static void SetTrackShowMarkers(TrackAsset track, bool collapsed)
  107. {
  108. if (track == null)
  109. return;
  110. GetTrackViewModelData(track).showMarkers = collapsed;
  111. }
  112. public static bool GetShowInlineCurves(TrackAsset track)
  113. {
  114. if (track == null)
  115. return false;
  116. return GetTrackViewModelData(track).showInlineCurves;
  117. }
  118. public static void SetShowInlineCurves(TrackAsset track, bool inlineOn)
  119. {
  120. if (track == null)
  121. return;
  122. GetTrackViewModelData(track).showInlineCurves = inlineOn;
  123. }
  124. public static float GetInlineCurveHeight(TrackAsset asset)
  125. {
  126. if (asset == null)
  127. return TrackViewModelData.DefaultinlineAnimationCurveHeight;
  128. return GetTrackViewModelData(asset).inlineAnimationCurveHeight;
  129. }
  130. public static void SetInlineCurveHeight(TrackAsset asset, float height)
  131. {
  132. if (asset != null)
  133. GetTrackViewModelData(asset).inlineAnimationCurveHeight = height;
  134. }
  135. }
  136. }