2022-01-12 10:06:03 +03:00
|
|
|
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;
|
|
|
|
}
|
2022-01-12 10:39:15 +03:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2022-01-12 10:06:03 +03:00
|
|
|
}
|
|
|
|
}
|