A game about forced loneliness, made by TACStudios
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}