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