86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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;
 | |
|         }
 | |
|     }
 | |
| }
 |