// 'double' precision variants for some of Unity's Mathf functions. using System.Runtime.CompilerServices; namespace Mirror { public static class Mathd { // Unity 2020 doesn't have Math.Clamp yet. /// Clamps value between 0 and 1 and returns value. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double Clamp(double value, double min, double max) { if (value < min) return min; if (value > max) return max; return value; } /// Clamps value between 0 and 1 and returns value. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double Clamp01(double value) => Clamp(value, 0, 1); /// Calculates the linear parameter t that produces the interpolant value within the range [a, b]. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double InverseLerp(double a, double b, double value) => a != b ? Clamp01((value - a) / (b - a)) : 0; /// Linearly interpolates between a and b by t with no limit to t. [MethodImpl(MethodImplOptions.AggressiveInlining)] public static double LerpUnclamped(double a, double b, double t) => a + (b - a) * t; } }