// 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;
}
}
/************************************************************************************************************************/
}
}