EditorClipFactory.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Timeline;
  5. using UnityObject = UnityEngine.Object;
  6. namespace UnityEditor.Timeline
  7. {
  8. static class EditorClipFactory
  9. {
  10. static Dictionary<TimelineClip, EditorClip> s_EditorCache = new Dictionary<TimelineClip, EditorClip>();
  11. public static EditorClip GetEditorClip(TimelineClip clip)
  12. {
  13. if (clip == null)
  14. throw new ArgumentException("parameter cannot be null");
  15. if (s_EditorCache.ContainsKey(clip))
  16. {
  17. var editorClip = s_EditorCache[clip];
  18. if (editorClip != null)
  19. return editorClip;
  20. }
  21. var editor = ScriptableObject.CreateInstance<EditorClip>();
  22. editor.hideFlags |= HideFlags.HideInHierarchy | HideFlags.DontSaveInEditor;
  23. editor.lastHash = -1;
  24. editor.clip = clip;
  25. s_EditorCache[clip] = editor;
  26. return editor;
  27. }
  28. public static void RemoveEditorClip(TimelineClip clip)
  29. {
  30. if (clip == null)
  31. return;
  32. if (s_EditorCache.ContainsKey(clip))
  33. {
  34. var obj = s_EditorCache[clip];
  35. if (obj != null)
  36. UnityObject.DestroyImmediate(obj);
  37. s_EditorCache.Remove(clip);
  38. }
  39. }
  40. public static bool Contains(TimelineClip clip)
  41. {
  42. return clip != null && s_EditorCache.ContainsKey(clip);
  43. }
  44. }
  45. }