2025-05-09 15:40:34 +08:00

203 lines
7.0 KiB
C#

// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
using UnityEngine;
#if UNITY_UGUI
using UnityEngine.EventSystems;
#endif
#if UNITY_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif
namespace Animancer.Samples
{
/// <summary>
/// A standard wrapper for receiving input from the
/// <see href="https://docs.unity3d.com/Packages/com.unity.inputsystem@latest">Input System</see> package or the
/// <see href="https://docs.unity3d.com/Manual/class-InputManager.html">Legacy Input Manager</see>.
/// <remarks>
/// <strong>Documentation:</strong>
/// <see href="https://kybernetik.com.au/animancer/docs/samples/basics/input">
/// Input</see>
/// </remarks>
/// https://kybernetik.com.au/animancer/api/Animancer.Samples/SampleInput
///
[AnimancerHelpUrl(typeof(SampleInput))]
public static class SampleInput
{
/************************************************************************************************************************/
/// <summary>The current screen position of the mouse pointer.</summary>
public static Vector2 MousePosition
#if UNITY_INPUT_SYSTEM
=> Mouse.current.position.ReadValue();
#else
=> Input.mousePosition;
#endif
/// <summary>The amount that the mouse has moved since last frame.</summary>
public static Vector2 MousePositionDelta
#if UNITY_INPUT_SYSTEM
=> Mouse.current.delta.ReadValue();
#else
=> new(Input.GetAxisRaw("Mouse X") * 20, Input.GetAxisRaw("Mouse Y") * 20);
#endif
/// <summary>The amount that the mouse scroll value has changed since last frame.</summary>
public static Vector2 MouseScrollDelta
#if UNITY_INPUT_SYSTEM
=> Mouse.current.scroll.ReadValue() * 0.01f;
#else
=> Input.mouseScrollDelta;
#endif
/************************************************************************************************************************/
/// <summary>Is the mouse pointer currently over a UI object?</summary>
public static bool IsPointerOverUI
#if UNITY_UGUI
=> EventSystem.current != null
&& EventSystem.current.IsPointerOverGameObject();
#else
=> false;
#endif
/************************************************************************************************************************/
/// <summary>Was the left mouse button pressed this frame?</summary>
public static bool LeftMouseDown
#if UNITY_INPUT_SYSTEM
=> !IsPointerOverUI
&& Mouse.current.leftButton.wasPressedThisFrame;
#else
=> Input.GetMouseButtonDown(0);
#endif
/// <summary>Is the left mouse button currently being held down?</summary>
public static bool LeftMouseHold
#if UNITY_INPUT_SYSTEM
=> Mouse.current.leftButton.isPressed;
#else
=> Input.GetMouseButton(0);
#endif
/// <summary>Was the left mouse button released this frame?</summary>
public static bool LeftMouseUp
#if UNITY_INPUT_SYSTEM
=> !IsPointerOverUI
&& Mouse.current.leftButton.wasReleasedThisFrame;
#else
=> !IsPointerOverUI
&& Input.GetMouseButtonUp(0);
#endif
/************************************************************************************************************************/
/// <summary>Was the right mouse button pressed this frame?</summary>
public static bool RightMouseDown
#if UNITY_INPUT_SYSTEM
=> !IsPointerOverUI
&& Mouse.current.rightButton.wasPressedThisFrame;
#else
=> !IsPointerOverUI
&& Input.GetMouseButtonDown(1);
#endif
/// <summary>Is the right mouse button currently being held down?</summary>
public static bool RightMouseHold
#if UNITY_INPUT_SYSTEM
=> Mouse.current.rightButton.isPressed;
#else
=> Input.GetMouseButton(1);
#endif
/************************************************************************************************************************/
/// <summary>Was <see cref="KeyCode.Space"/> pressed this frame?</summary>
public static bool SpaceDown
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.spaceKey.wasPressedThisFrame;
#else
=> Input.GetKeyDown(KeyCode.Space);
#endif
/// <summary>Is <see cref="KeyCode.Space"/> currently being held down?</summary>
public static bool SpaceHold
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.spaceKey.isPressed;
#else
=> Input.GetKey(KeyCode.Space);
#endif
/// <summary>Was <see cref="KeyCode.Space"/> released this frame?</summary>
public static bool SpaceUp
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.spaceKey.wasReleasedThisFrame;
#else
=> Input.GetKeyUp(KeyCode.Space);
#endif
/************************************************************************************************************************/
/// <summary>Is <see cref="KeyCode.LeftShift"/> currently being held down?</summary>
public static bool LeftShiftHold
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.leftShiftKey.isPressed;
#else
=> Input.GetKey(KeyCode.LeftShift);
#endif
/************************************************************************************************************************/
/// <summary>Was <see cref="KeyCode.Alpha1"/> released this frame?</summary>
public static bool Number1Up
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.digit1Key.wasReleasedThisFrame;
#else
=> Input.GetKeyUp(KeyCode.Alpha1);
#endif
/// <summary>Was <see cref="KeyCode.Alpha2"/> released this frame?</summary>
public static bool Number2Up
#if UNITY_INPUT_SYSTEM
=> Keyboard.current.digit2Key.wasReleasedThisFrame;
#else
=> Input.GetKeyUp(KeyCode.Alpha2);
#endif
/************************************************************************************************************************/
#if UNITY_INPUT_SYSTEM
private static InputAction _WasdAction;
#endif
/// <summary>WASD Controls.</summary>
public static Vector2 WASD
#if UNITY_INPUT_SYSTEM
{
get
{
if (_WasdAction == null)
{
_WasdAction = new(nameof(WASD), InputActionType.Value);
_WasdAction.AddCompositeBinding("2DVector")
.With("Up", "<Keyboard>/w")
.With("Down", "<Keyboard>/s")
.With("Left", "<Keyboard>/a")
.With("Right", "<Keyboard>/d");
}
_WasdAction.Enable();
return _WasdAction.ReadValue<Vector2>();
}
}
#else
=> new(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
#endif
/************************************************************************************************************************/
}
}