PlaybackScroller.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using UnityEngine;
  2. namespace UnityEditor.Timeline
  3. {
  4. enum PlaybackScrollMode
  5. {
  6. None,
  7. Pan,
  8. Smooth
  9. }
  10. static class PlaybackScroller
  11. {
  12. public static void AutoScroll(WindowState state)
  13. {
  14. if (Event.current.type != EventType.Layout)
  15. return;
  16. switch (state.autoScrollMode)
  17. {
  18. case PlaybackScrollMode.Pan:
  19. DoPanScroll(state);
  20. break;
  21. case PlaybackScrollMode.Smooth:
  22. DoSmoothScroll(state);
  23. break;
  24. }
  25. }
  26. static void DoSmoothScroll(WindowState state)
  27. {
  28. if (state.playing)
  29. state.SetPlayHeadToMiddle();
  30. state.UpdateLastFrameTime();
  31. }
  32. static void DoPanScroll(WindowState state)
  33. {
  34. if (!state.playing)
  35. return;
  36. var paddingDeltaTime = state.PixelDeltaToDeltaTime(WindowConstants.autoPanPaddingInPixels);
  37. var showRange = state.timeAreaShownRange;
  38. var rightBoundForPan = showRange.y - paddingDeltaTime;
  39. if (state.editSequence.time > rightBoundForPan)
  40. {
  41. var leftBoundForPan = showRange.x + paddingDeltaTime;
  42. var delta = rightBoundForPan - leftBoundForPan;
  43. state.SetTimeAreaShownRange(showRange.x + delta, showRange.y + delta);
  44. }
  45. }
  46. }
  47. }