UnityGame/Library/PackageCache/com.unity.inputsystem/InputSystem/InputExtensions.cs
2024-10-27 10:53:47 +03:00

143 lines
5.3 KiB
C#

////REVIEW: move everything from InputControlExtensions here?
namespace UnityEngine.InputSystem
{
/// <summary>
/// Various useful extension methods.
/// </summary>
public static class InputExtensions
{
/// <summary>
/// Return true if the given phase is <see cref="InputActionPhase.Started"/> or <see cref="InputActionPhase.Performed"/>.
/// </summary>
/// <param name="phase">An action phase.</param>
/// <returns>True if the phase is started or performed.</returns>
/// <seealso cref="InputAction.phase"/>
public static bool IsInProgress(this InputActionPhase phase)
{
return phase == InputActionPhase.Started || phase == InputActionPhase.Performed;
}
/// <summary>
/// Return true if the given phase is <see cref="TouchPhase.Canceled"/> or <see cref="TouchPhase.Ended"/>, i.e.
/// if a touch with that phase would no longer be ongoing.
/// </summary>
/// <param name="phase">A touch phase.</param>
/// <returns>True if the phase indicates a touch that has ended.</returns>
/// <seealso cref="Controls.TouchControl.phase"/>
public static bool IsEndedOrCanceled(this TouchPhase phase)
{
return phase == TouchPhase.Canceled || phase == TouchPhase.Ended;
}
/// <summary>
/// Return true if the given phase is <see cref="TouchPhase.Began"/>, <see cref="UnityEngine.TouchPhase.Moved"/>, or
/// <see cref="TouchPhase.Stationary"/>, i.e. if a touch with that phase would indicate an ongoing touch.
/// </summary>
/// <param name="phase">A touch phase.</param>
/// <returns>True if the phase indicates a touch that is ongoing.</returns>
/// <seealso cref="Controls.TouchControl.phase"/>
public static bool IsActive(this TouchPhase phase)
{
switch (phase)
{
case TouchPhase.Began:
case TouchPhase.Moved:
case TouchPhase.Stationary:
return true;
}
return false;
}
/// <summary>
/// Check if a <see cref="Key"/> enum value represents a modifier key.
/// </summary>
/// <param name="key">The key enum value you want to check.</param>
/// <returns><c>true</c> if <paramref name="key"/> represents a modifier key, else <c>false</c>.</returns>
/// <remarks>
/// Modifier keys are any keys you can hold down to modify the output of other keys pressed simultaneously,
/// such as the "shift" or "control" keys.
/// </remarks>
public static bool IsModifierKey(this Key key)
{
switch (key)
{
case Key.LeftAlt:
case Key.RightAlt:
case Key.LeftShift:
case Key.RightShift:
case Key.LeftMeta:
case Key.RightMeta:
case Key.LeftCtrl:
case Key.RightCtrl:
return true;
}
return false;
}
////REVIEW: Is this a good idea? Ultimately it's up to any one keyboard layout to define this however it wants.
/// <summary>
/// Check if a <see cref="Key"/> enum value represents key generating text input.
/// </summary>
/// <param name="key">The key enum value you want to check.</param>
/// <returns><c>true</c> if <paramref name="key"/> represents a key generating non-whitespace text input, else <c>false</c>.</returns>
public static bool IsTextInputKey(this Key key)
{
switch (key)
{
case Key.LeftShift:
case Key.RightShift:
case Key.LeftAlt:
case Key.RightAlt:
case Key.LeftCtrl:
case Key.RightCtrl:
case Key.LeftMeta:
case Key.RightMeta:
case Key.ContextMenu:
case Key.Escape:
case Key.LeftArrow:
case Key.RightArrow:
case Key.UpArrow:
case Key.DownArrow:
case Key.Backspace:
case Key.PageDown:
case Key.PageUp:
case Key.Home:
case Key.End:
case Key.Insert:
case Key.Delete:
case Key.CapsLock:
case Key.NumLock:
case Key.PrintScreen:
case Key.ScrollLock:
case Key.Pause:
case Key.None:
case Key.Space:
case Key.Enter:
case Key.Tab:
case Key.NumpadEnter:
case Key.F1:
case Key.F2:
case Key.F3:
case Key.F4:
case Key.F5:
case Key.F6:
case Key.F7:
case Key.F8:
case Key.F9:
case Key.F10:
case Key.F11:
case Key.F12:
case Key.OEM1:
case Key.OEM2:
case Key.OEM3:
case Key.OEM4:
case Key.OEM5:
case Key.IMESelected:
return false;
}
return true;
}
}
}