// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2023 Kybernetik // namespace Animancer { /// https://kybernetik.com.au/animancer/api/Animancer/Validate public static partial class Validate { /************************************************************************************************************************/ /// A rule that defines which values are valid. /// https://kybernetik.com.au/animancer/api/Animancer/Value public enum Value { /// Any value is allowed. Any, /// Only values between 0 (inclusive) and 1 (inclusive) are allowed. ZeroToOne, /// Only 0 or positive values are allowed. IsNotNegative, /// Infinity and NaN are not allowed. IsFinite, /// Infinity is not allowed. IsFiniteOrNaN, } /************************************************************************************************************************/ /// Enforces the `rule` on the `value`. public static void ValueRule(ref float value, Value rule) { switch (rule) { case Value.Any: default: return; case Value.ZeroToOne: if (!(value >= 0))// Reversed comparison to include NaN. value = 0; else if (value > 1) value = 1; break; case Value.IsNotNegative: if (!(value >= 0))// Reversed comparison to include NaN. value = 0; break; case Value.IsFinite: if (float.IsNaN(value)) value = 0; else if (float.IsPositiveInfinity(value)) value = float.MaxValue; else if (float.IsNegativeInfinity(value)) value = float.MinValue; break; case Value.IsFiniteOrNaN: if (float.IsPositiveInfinity(value)) value = float.MaxValue; else if (float.IsNegativeInfinity(value)) value = float.MinValue; break; } } /************************************************************************************************************************/ } }