summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs
diff options
context:
space:
mode:
authorAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
committerAndrew Lee <alee14498@protonmail.com>2020-04-19 17:19:32 -0400
commitc55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78 (patch)
treeee4d51c7c1d633e11f46453ef1edd3c77c4ef9f7 /Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs
downloadProject-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.gz
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.tar.bz2
Project-Sandbox-c55fba8ab2a1c9d3df65eda4a5a1e957f4aa1f78.zip
Inital commit
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs226
1 files changed, 226 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs
new file mode 100644
index 0000000..af68af8
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Runtime/DiscreteTime.cs
@@ -0,0 +1,226 @@
+using System;
+
+namespace UnityEngine.Timeline
+{
+ struct DiscreteTime : IComparable
+ {
+ const double k_Tick = 1e-12;
+ public static readonly DiscreteTime kMaxTime = new DiscreteTime(Int64.MaxValue);
+
+ readonly Int64 m_DiscreteTime;
+
+ public static double tickValue { get { return k_Tick; } }
+
+ public DiscreteTime(DiscreteTime time)
+ {
+ m_DiscreteTime = time.m_DiscreteTime;
+ }
+
+ DiscreteTime(Int64 time)
+ {
+ m_DiscreteTime = time;
+ }
+
+ public DiscreteTime(double time)
+ {
+ m_DiscreteTime = DoubleToDiscreteTime(time);
+ }
+
+ public DiscreteTime(float time)
+ {
+ m_DiscreteTime = FloatToDiscreteTime(time);
+ }
+
+ public DiscreteTime(int time)
+ {
+ m_DiscreteTime = IntToDiscreteTime(time);
+ }
+
+ public DiscreteTime(int frame, double fps)
+ {
+ m_DiscreteTime = DoubleToDiscreteTime(frame * fps);
+ }
+
+ public DiscreteTime OneTickBefore()
+ {
+ return new DiscreteTime(m_DiscreteTime - 1);
+ }
+
+ public DiscreteTime OneTickAfter()
+ {
+ return new DiscreteTime(m_DiscreteTime + 1);
+ }
+
+ public Int64 GetTick()
+ {
+ return m_DiscreteTime;
+ }
+
+ public static DiscreteTime FromTicks(Int64 ticks)
+ {
+ return new DiscreteTime(ticks);
+ }
+
+ public int CompareTo(object obj)
+ {
+ if (obj is DiscreteTime)
+ return m_DiscreteTime.CompareTo(((DiscreteTime)obj).m_DiscreteTime);
+ return 1;
+ }
+
+ public bool Equals(DiscreteTime other)
+ {
+ return m_DiscreteTime == other.m_DiscreteTime;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is DiscreteTime)
+ return Equals((DiscreteTime)obj);
+ return false;
+ }
+
+ static Int64 DoubleToDiscreteTime(double time)
+ {
+ double number = (time / k_Tick) + 0.5;
+ if (number < Int64.MaxValue && number > Int64.MinValue)
+ return (Int64)number;
+ throw new ArgumentOutOfRangeException("Time is over the discrete range.");
+ }
+
+ static Int64 FloatToDiscreteTime(float time)
+ {
+ float number = (time / (float)k_Tick) + 0.5f;
+ if (number < Int64.MaxValue && number > Int64.MinValue)
+ return (Int64)number;
+ throw new ArgumentOutOfRangeException("Time is over the discrete range.");
+ }
+
+ static Int64 IntToDiscreteTime(int time)
+ {
+ return DoubleToDiscreteTime(time);
+ }
+
+ static double ToDouble(Int64 time)
+ {
+ return time * k_Tick;
+ }
+
+ static float ToFloat(Int64 time)
+ {
+ return (float)ToDouble(time);
+ }
+
+ public static explicit operator double(DiscreteTime b)
+ {
+ return ToDouble(b.m_DiscreteTime);
+ }
+
+ public static explicit operator float(DiscreteTime b)
+ {
+ return ToFloat(b.m_DiscreteTime);
+ }
+
+ public static explicit operator Int64(DiscreteTime b)
+ {
+ return b.m_DiscreteTime;
+ }
+
+ public static explicit operator DiscreteTime(double time)
+ {
+ return new DiscreteTime(time);
+ }
+
+ public static explicit operator DiscreteTime(float time)
+ {
+ return new DiscreteTime(time);
+ }
+
+ public static implicit operator DiscreteTime(Int32 time)
+ {
+ return new DiscreteTime(time);
+ }
+
+ public static explicit operator DiscreteTime(Int64 time)
+ {
+ return new DiscreteTime(time);
+ }
+
+ public static bool operator==(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return lhs.m_DiscreteTime == rhs.m_DiscreteTime;
+ }
+
+ public static bool operator!=(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return !(lhs == rhs);
+ }
+
+ public static bool operator>(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return lhs.m_DiscreteTime > rhs.m_DiscreteTime;
+ }
+
+ public static bool operator<(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return lhs.m_DiscreteTime < rhs.m_DiscreteTime;
+ }
+
+ public static bool operator<=(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return lhs.m_DiscreteTime <= rhs.m_DiscreteTime;
+ }
+
+ public static bool operator>=(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return lhs.m_DiscreteTime >= rhs.m_DiscreteTime;
+ }
+
+ public static DiscreteTime operator+(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return new DiscreteTime(lhs.m_DiscreteTime + rhs.m_DiscreteTime);
+ }
+
+ public static DiscreteTime operator-(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return new DiscreteTime(lhs.m_DiscreteTime - rhs.m_DiscreteTime);
+ }
+
+ public override string ToString()
+ {
+ return m_DiscreteTime.ToString();
+ }
+
+ public override int GetHashCode()
+ {
+ return m_DiscreteTime.GetHashCode();
+ }
+
+ public static DiscreteTime Min(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return new DiscreteTime(Math.Min(lhs.m_DiscreteTime, rhs.m_DiscreteTime));
+ }
+
+ public static DiscreteTime Max(DiscreteTime lhs, DiscreteTime rhs)
+ {
+ return new DiscreteTime(Math.Max(lhs.m_DiscreteTime, rhs.m_DiscreteTime));
+ }
+
+ public static double SnapToNearestTick(double time)
+ {
+ Int64 discreteTime = DoubleToDiscreteTime(time);
+ return ToDouble(discreteTime);
+ }
+
+ public static float SnapToNearestTick(float time)
+ {
+ Int64 discreteTime = FloatToDiscreteTime(time);
+ return ToFloat(discreteTime);
+ }
+
+ public static Int64 GetNearestTick(double time)
+ {
+ return DoubleToDiscreteTime(time);
+ }
+ }
+}