TimeReferenceUtility.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using UnityEngine;
  2. using UnityEngine.Timeline;
  3. namespace UnityEditor.Timeline
  4. {
  5. static class TimeReferenceUtility
  6. {
  7. static WindowState state { get { return TimelineWindow.instance.state; } }
  8. public static float PixelToTime(Vector2 mousePos)
  9. {
  10. return PixelToTime(mousePos.x);
  11. }
  12. public static float PixelToTime(float pixelX)
  13. {
  14. return state.PixelToTime(pixelX);
  15. }
  16. public static double GetSnappedTimeAtMousePosition(Vector2 mousePos)
  17. {
  18. return state.GetSnappedTimeAtMousePosition(mousePos);
  19. }
  20. public static double SnapToFrameIfRequired(double currentTime)
  21. {
  22. return TimelinePreferences.instance.snapToFrame ? SnapToFrame(currentTime) : currentTime;
  23. }
  24. public static double SnapToFrame(double time)
  25. {
  26. if (state.timeReferenceMode == TimeReferenceMode.Global)
  27. {
  28. time = state.editSequence.ToGlobalTime(time);
  29. time = TimeUtility.RoundToFrame(time, state.referenceSequence.frameRate);
  30. return state.editSequence.ToLocalTime(time);
  31. }
  32. return TimeUtility.RoundToFrame(time, state.referenceSequence.frameRate);
  33. }
  34. public static string ToTimeString(double time, string format = "F2")
  35. {
  36. if (state.timeReferenceMode == TimeReferenceMode.Global)
  37. time = state.editSequence.ToGlobalTime(time);
  38. return state.timeInFrames ?
  39. TimeUtility.TimeAsFrames(time, state.referenceSequence.frameRate, format) :
  40. TimeUtility.TimeAsTimeCode(time, state.referenceSequence.frameRate, format);
  41. }
  42. public static double FromTimeString(string timeString)
  43. {
  44. double newTime;
  45. if (state.timeInFrames)
  46. {
  47. double newFrameDouble;
  48. if (double.TryParse(timeString, out newFrameDouble))
  49. newTime = TimeUtility.FromFrames(newFrameDouble, state.referenceSequence.frameRate);
  50. else
  51. newTime = state.editSequence.time;
  52. }
  53. else
  54. {
  55. newTime = TimeUtility.ParseTimeCode(timeString, state.referenceSequence.frameRate, -1);
  56. }
  57. if (newTime >= 0.0)
  58. {
  59. return state.timeReferenceMode == TimeReferenceMode.Global ?
  60. state.editSequence.ToLocalTime(newTime) : newTime;
  61. }
  62. return state.editSequence.time;
  63. }
  64. }
  65. }