You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
5.7 KiB
184 lines
5.7 KiB
using UnityEngine; |
|
using UnityEngine.Timeline; |
|
using UnityObject = UnityEngine.Object; |
|
using ViewModelsMap = System.Collections.Generic.Dictionary<UnityEngine.Timeline.TimelineAsset, UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>; |
|
using ViewModelsList = System.Collections.Generic.List<UnityEditor.Timeline.ScriptableObjectViewPrefs<UnityEditor.Timeline.TimelineAssetViewModel>>; |
|
|
|
namespace UnityEditor.Timeline |
|
{ |
|
static class TimelineWindowViewPrefs |
|
{ |
|
public const string FilePath = "Library/Timeline"; |
|
|
|
static readonly ViewModelsMap k_ViewModelsMap = new ViewModelsMap(); |
|
static readonly ViewModelsList k_UnassociatedViewModels = new ViewModelsList(); |
|
|
|
public static int viewModelCount |
|
{ |
|
get { return k_ViewModelsMap.Count + k_UnassociatedViewModels.Count; } |
|
} |
|
|
|
public static TimelineAssetViewModel GetOrCreateViewModel(TimelineAsset asset) |
|
{ |
|
if (asset == null) |
|
return CreateUnassociatedViewModel(); |
|
|
|
ScriptableObjectViewPrefs<TimelineAssetViewModel> vm; |
|
if (k_ViewModelsMap.TryGetValue(asset, out vm)) |
|
return vm.viewModel; |
|
|
|
return CreateViewModel(asset).viewModel; |
|
} |
|
|
|
public static TimelineAssetViewModel CreateUnassociatedViewModel() |
|
{ |
|
var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(null, FilePath); |
|
k_UnassociatedViewModels.Add(vm); |
|
return vm.viewModel; |
|
} |
|
|
|
static ScriptableObjectViewPrefs<TimelineAssetViewModel> CreateViewModel(TimelineAsset asset) |
|
{ |
|
var vm = new ScriptableObjectViewPrefs<TimelineAssetViewModel>(asset, FilePath); |
|
k_ViewModelsMap.Add(asset, vm); |
|
return vm; |
|
} |
|
|
|
public static void SaveViewModel(TimelineAsset asset) |
|
{ |
|
if (asset == null) |
|
return; |
|
|
|
ScriptableObjectViewPrefs<TimelineAssetViewModel> vm; |
|
if (!k_ViewModelsMap.TryGetValue(asset, out vm)) |
|
vm = CreateViewModel(asset); |
|
|
|
vm.Save(); |
|
} |
|
|
|
public static void SaveAll() |
|
{ |
|
foreach (var kvp in k_ViewModelsMap) |
|
kvp.Value.Save(); |
|
} |
|
|
|
public static void UnloadViewModel(TimelineAsset asset) |
|
{ |
|
ScriptableObjectViewPrefs<TimelineAssetViewModel> vm; |
|
if (k_ViewModelsMap.TryGetValue(asset, out vm)) |
|
{ |
|
vm.Dispose(); |
|
k_ViewModelsMap.Remove(asset); |
|
} |
|
} |
|
|
|
public static void UnloadAllViewModels() |
|
{ |
|
foreach (var kvp in k_ViewModelsMap) |
|
kvp.Value.Dispose(); |
|
|
|
foreach (var vm in k_UnassociatedViewModels) |
|
vm.Dispose(); |
|
|
|
k_ViewModelsMap.Clear(); |
|
k_UnassociatedViewModels.Clear(); |
|
} |
|
|
|
public static TrackViewModelData GetTrackViewModelData(TrackAsset track) |
|
{ |
|
if (track == null) |
|
return new TrackViewModelData(); |
|
|
|
if (track.timelineAsset == null) |
|
return new TrackViewModelData(); |
|
|
|
var prefs = GetOrCreateViewModel(track.timelineAsset); |
|
|
|
TrackViewModelData trackData; |
|
if (prefs.tracksViewModelData.TryGetValue(track, out trackData)) |
|
{ |
|
return trackData; |
|
} |
|
|
|
trackData = new TrackViewModelData(); |
|
prefs.tracksViewModelData[track] = trackData; |
|
return trackData; |
|
} |
|
|
|
public static bool IsTrackCollapsed(TrackAsset track) |
|
{ |
|
if (track == null) |
|
return true; |
|
|
|
return GetTrackViewModelData(track).collapsed; |
|
} |
|
|
|
public static void SetTrackCollapsed(TrackAsset track, bool collapsed) |
|
{ |
|
if (track == null) |
|
return; |
|
|
|
GetTrackViewModelData(track).collapsed = collapsed; |
|
} |
|
|
|
public static bool IsShowMarkers(TrackAsset track) |
|
{ |
|
if (track == null) |
|
return true; |
|
|
|
return GetTrackViewModelData(track).showMarkers; |
|
} |
|
|
|
public static void SetTrackShowMarkers(TrackAsset track, bool collapsed) |
|
{ |
|
if (track == null) |
|
return; |
|
|
|
GetTrackViewModelData(track).showMarkers = collapsed; |
|
} |
|
|
|
public static bool GetShowInlineCurves(TrackAsset track) |
|
{ |
|
if (track == null) |
|
return false; |
|
|
|
return GetTrackViewModelData(track).showInlineCurves; |
|
} |
|
|
|
public static void SetShowInlineCurves(TrackAsset track, bool inlineOn) |
|
{ |
|
if (track == null) |
|
return; |
|
|
|
GetTrackViewModelData(track).showInlineCurves = inlineOn; |
|
} |
|
|
|
public static float GetInlineCurveHeight(TrackAsset asset) |
|
{ |
|
if (asset == null) |
|
return TrackViewModelData.DefaultinlineAnimationCurveHeight; |
|
|
|
return GetTrackViewModelData(asset).inlineAnimationCurveHeight; |
|
} |
|
|
|
public static void SetInlineCurveHeight(TrackAsset asset, float height) |
|
{ |
|
if (asset != null) |
|
GetTrackViewModelData(asset).inlineAnimationCurveHeight = height; |
|
} |
|
|
|
public static int GetTrackHeightExtension(TrackAsset asset) |
|
{ |
|
if (asset == null) |
|
return 0; |
|
|
|
return GetTrackViewModelData(asset).trackHeightExtension; |
|
} |
|
|
|
public static void SetTrackHeightExtension(TrackAsset asset, int height) |
|
{ |
|
if (asset != null) |
|
GetTrackViewModelData(asset).trackHeightExtension = height; |
|
} |
|
} |
|
}
|
|
|