12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using System;
- using System.Globalization;
- using UnityEngine.Timeline;
-
- namespace UnityEditor.Timeline
- {
- /// <summary>
- /// The available display modes for time in the Timeline Editor.
- /// </summary>
- public enum TimeFormat
- {
- /// <summary>Displays time values as frames.</summary>
- Frames,
-
- /// <summary>Displays time values as timecode (SS:FF) format.</summary>
- Timecode,
-
- /// <summary>Displays time values as seconds.</summary>
- Seconds
- };
-
- static class TimeDisplayUnitExtensions
- {
- public static TimeArea.TimeFormat ToTimeAreaFormat(this TimeFormat timeDisplayUnit)
- {
- switch (timeDisplayUnit)
- {
- case TimeFormat.Frames: return TimeArea.TimeFormat.Frame;
- case TimeFormat.Timecode: return TimeArea.TimeFormat.TimeFrame;
- case TimeFormat.Seconds: return TimeArea.TimeFormat.None;
- }
-
- return TimeArea.TimeFormat.Frame;
- }
-
- public static string ToTimeString(this TimeFormat timeFormat, double time, double frameRate, string format = "f2")
- {
- switch (timeFormat)
- {
- case TimeFormat.Frames: return TimeUtility.TimeAsFrames(time, frameRate, format);
- case TimeFormat.Timecode: return TimeUtility.TimeAsTimeCode(time, frameRate, format);
- case TimeFormat.Seconds: return time.ToString(format, (IFormatProvider)CultureInfo.InvariantCulture.NumberFormat);
- }
-
- return time.ToString(format);
- }
-
- public static string ToTimeStringWithDelta(this TimeFormat timeFormat, double time, double frameRate, double delta, string format = "f2")
- {
- const double epsilon = 1e-7;
- var result = ToTimeString(timeFormat, time, frameRate, format);
- if (delta > epsilon || delta < -epsilon)
- {
- var sign = ((delta >= 0) ? "+" : "-");
- var deltaStr = ToTimeString(timeFormat, Math.Abs(delta), frameRate, format);
- return $"{result} ({sign}{deltaStr})";
- }
- return result;
- }
-
- public static double FromTimeString(this TimeFormat timeFormat, string timeString, double frameRate, double defaultValue)
- {
- double time = defaultValue;
- switch (timeFormat)
- {
- case TimeFormat.Frames:
- if (!double.TryParse(timeString, NumberStyles.Any, CultureInfo.InvariantCulture, out time))
- return defaultValue;
- time = TimeUtility.FromFrames(time, frameRate);
- break;
- case TimeFormat.Seconds:
- time = TimeUtility.ParseTimeSeconds(timeString, frameRate, defaultValue);
- break;
- case TimeFormat.Timecode:
- time = TimeUtility.ParseTimeCode(timeString, frameRate, defaultValue);
- break;
- default:
- time = defaultValue;
- break;
- }
-
- return time;
- }
- }
- }
|