IndieGame/client/Packages/com.unity.inputsystem@1.7.0/InputSystem/Controls/Processors/ClampProcessor.cs

56 lines
2.0 KiB
C#
Raw Normal View History

2024-10-11 10:12:15 +08:00
using UnityEngine.Scripting;
////TODO: move clamping settings into struct and add process function; then embed both here and in AxisControl
namespace UnityEngine.InputSystem.Processors
{
/// <summary>
/// Clamp a floating-point input to between <see cref="min"/> and <see cref="max"/>. This is equivalent
/// to <c>Mathf.Clamp(value, min, max)</c>.
/// </summary>
/// <remarks>
/// This processor is registered (see <see cref="InputSystem.RegisterProcessor{T}"/>) under the name "clamp" by default.
///
/// Note that no normalization is performed. If you want to re-normalize the input value after clamping,
/// add a <see cref="NormalizeProcessor"/>. Alternatively, add a <see cref="AxisDeadzoneProcessor"/> which
/// both clamps and normalizes.
///
/// <example>
/// <code>
/// </code>
/// // Bind to right trigger on gamepad such that the value never drops below 0.3 and never goes
/// // above 0.7.
/// new InputAction(binding: "&lt;Gamepad&gt;/rightTrigger", processors: "clamp(min=0.3,max=0.7)");
/// </example>
/// </remarks>
public class ClampProcessor : InputProcessor<float>
{
/// <summary>
/// Minimum value (inclusive!) of the accepted value range.
/// </summary>
public float min;
/// <summary>
/// Maximum value (inclusive!) of the accepted value range.
/// </summary>
public float max;
/// <summary>
/// Clamp <paramref name="value"/> to the range of <see cref="min"/> and <see cref="max"/>.
/// </summary>
/// <param name="value">Input value.</param>
/// <param name="control">Ignored.</param>
/// <returns>Clamped value.</returns>
public override float Process(float value, InputControl control)
{
return Mathf.Clamp(value, min, max);
}
/// <inheritdoc/>
public override string ToString()
{
return $"Clamp(min={min},max={max})";
}
}
}