No Description
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.

TimeFormat.cs 3.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Globalization;
  3. using UnityEngine.Timeline;
  4. namespace UnityEditor.Timeline
  5. {
  6. /// <summary>
  7. /// The available display modes for time in the Timeline Editor.
  8. /// </summary>
  9. public enum TimeFormat
  10. {
  11. /// <summary>Displays time values as frames.</summary>
  12. Frames,
  13. /// <summary>Displays time values as timecode (SS:FF) format.</summary>
  14. Timecode,
  15. /// <summary>Displays time values as seconds.</summary>
  16. Seconds
  17. };
  18. static class TimeDisplayUnitExtensions
  19. {
  20. public static TimeArea.TimeFormat ToTimeAreaFormat(this TimeFormat timeDisplayUnit)
  21. {
  22. switch (timeDisplayUnit)
  23. {
  24. case TimeFormat.Frames: return TimeArea.TimeFormat.Frame;
  25. case TimeFormat.Timecode: return TimeArea.TimeFormat.TimeFrame;
  26. case TimeFormat.Seconds: return TimeArea.TimeFormat.None;
  27. }
  28. return TimeArea.TimeFormat.Frame;
  29. }
  30. public static string ToTimeString(this TimeFormat timeFormat, double time, double frameRate, string format = "f2")
  31. {
  32. switch (timeFormat)
  33. {
  34. case TimeFormat.Frames: return TimeUtility.TimeAsFrames(time, frameRate, format);
  35. case TimeFormat.Timecode: return TimeUtility.TimeAsTimeCode(time, frameRate, format);
  36. case TimeFormat.Seconds: return time.ToString(format, (IFormatProvider)CultureInfo.InvariantCulture.NumberFormat);
  37. }
  38. return time.ToString(format);
  39. }
  40. public static string ToTimeStringWithDelta(this TimeFormat timeFormat, double time, double frameRate, double delta, string format = "f2")
  41. {
  42. const double epsilon = 1e-7;
  43. var result = ToTimeString(timeFormat, time, frameRate, format);
  44. if (delta > epsilon || delta < -epsilon)
  45. {
  46. var sign = ((delta >= 0) ? "+" : "-");
  47. var deltaStr = ToTimeString(timeFormat, Math.Abs(delta), frameRate, format);
  48. return $"{result} ({sign}{deltaStr})";
  49. }
  50. return result;
  51. }
  52. public static double FromTimeString(this TimeFormat timeFormat, string timeString, double frameRate, double defaultValue)
  53. {
  54. double time = defaultValue;
  55. switch (timeFormat)
  56. {
  57. case TimeFormat.Frames:
  58. if (!double.TryParse(timeString, NumberStyles.Any, CultureInfo.InvariantCulture, out time))
  59. return defaultValue;
  60. time = TimeUtility.FromFrames(time, frameRate);
  61. break;
  62. case TimeFormat.Seconds:
  63. time = TimeUtility.ParseTimeSeconds(timeString, frameRate, defaultValue);
  64. break;
  65. case TimeFormat.Timecode:
  66. time = TimeUtility.ParseTimeCode(timeString, frameRate, defaultValue);
  67. break;
  68. default:
  69. time = defaultValue;
  70. break;
  71. }
  72. return time;
  73. }
  74. }
  75. }