暫無描述
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.

ClipsLayer.cs 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.Timeline;
  4. namespace UnityEditor.Timeline
  5. {
  6. class ClipsLayer : ItemsLayer<TimelineClipGUI>
  7. {
  8. static readonly GUIStyle k_ConnectorIcon = DirectorStyles.Instance.connector;
  9. public ClipsLayer(Layer layerOrder, IRowGUI parent) : base(layerOrder)
  10. {
  11. var track = parent.asset;
  12. track.SortClips();
  13. TimelineClipGUI previousClipGUI = null;
  14. foreach (var clip in track.clips)
  15. {
  16. var oldClipGUI = ItemToItemGui.GetGuiForClip(clip);
  17. var isInvalid = oldClipGUI != null && oldClipGUI.isInvalid; // HACK Make sure to carry invalidy state when refereshing the cache.
  18. var currentClipGUI = new TimelineClipGUI(clip, parent, this) { isInvalid = isInvalid };
  19. if (previousClipGUI != null) previousClipGUI.nextClip = currentClipGUI;
  20. currentClipGUI.previousClip = previousClipGUI;
  21. AddItem(currentClipGUI);
  22. previousClipGUI = currentClipGUI;
  23. }
  24. //adjust zOrder based on current clip selection
  25. foreach (var clipGUI in items)
  26. {
  27. if (clipGUI.IsSelected())
  28. clipGUI.MoveToTop();
  29. }
  30. }
  31. public override void Draw(Rect rect, WindowState state)
  32. {
  33. base.Draw(rect, state); //draw clips
  34. DrawConnector(items);
  35. }
  36. static void DrawConnector(List<TimelineClipGUI> clips)
  37. {
  38. if (Event.current.type != EventType.Repaint)
  39. return;
  40. foreach (var clip in clips)
  41. {
  42. if (clip.previousClip != null && clip.visible && clip.treeViewRect.width > 14 &&
  43. (DiscreteTime)clip.start == (DiscreteTime)clip.previousClip.end)
  44. {
  45. // draw little connector widget
  46. var localRect = clip.treeViewRect;
  47. localRect.x -= Mathf.Floor(k_ConnectorIcon.fixedWidth / 2.0f);
  48. localRect.width = k_ConnectorIcon.fixedWidth;
  49. localRect.height = k_ConnectorIcon.fixedHeight;
  50. GUI.Label(localRect, GUIContent.none, k_ConnectorIcon);
  51. }
  52. }
  53. }
  54. }
  55. }