using System; namespace Plane { public static class MathUtils { public static void Constrain(ref T value, T min, T max) where T : struct, IComparable { if (min.CompareTo(max) > 0) { throw new ArgumentException($"Argument {nameof(max)} ({max}) must be greater than argument {nameof(min)} ({min}). ", nameof(max)); } if (value.CompareTo(min) < 0) { value = min; } if (value.CompareTo(max) > 0) { value = max; } } public static bool IsInRange(this T value, T min, T max) where T : struct, IComparable { if (min.CompareTo(max) > 0) { throw new ArgumentException($"Argument {nameof(max)} ({max}) must be greater than argument {nameof(min)} ({min}). ", nameof(max)); } return value.CompareTo(min) >= 0 && value.CompareTo(max) <= 0; } } }