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