NavigationModel.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #if UNITY_INPUT_SYSTEM_ENABLE_UI
  2. using UnityEngine.EventSystems;
  3. namespace UnityEngine.InputSystem.UI
  4. {
  5. internal struct NavigationModel
  6. {
  7. public Vector2 move;
  8. public int consecutiveMoveCount;
  9. public MoveDirection lastMoveDirection;
  10. public float lastMoveTime;
  11. public ButtonState submitButton;
  12. public ButtonState cancelButton;
  13. public AxisEventData eventData;
  14. public void Reset()
  15. {
  16. move = Vector2.zero;
  17. OnFrameFinished();
  18. }
  19. public void OnFrameFinished()
  20. {
  21. submitButton.OnFrameFinished();
  22. cancelButton.OnFrameFinished();
  23. }
  24. public struct ButtonState
  25. {
  26. private bool m_IsPressed;
  27. private PointerEventData.FramePressState m_FramePressState;
  28. public bool isPressed
  29. {
  30. get => m_IsPressed;
  31. set
  32. {
  33. if (m_IsPressed != value)
  34. {
  35. m_IsPressed = value;
  36. if (m_FramePressState == PointerEventData.FramePressState.NotChanged && value)
  37. m_FramePressState = PointerEventData.FramePressState.Pressed;
  38. else if (m_FramePressState == PointerEventData.FramePressState.NotChanged && !value)
  39. m_FramePressState = PointerEventData.FramePressState.Released;
  40. else if (m_FramePressState == PointerEventData.FramePressState.Pressed && !value)
  41. m_FramePressState = PointerEventData.FramePressState.PressedAndReleased;
  42. }
  43. }
  44. }
  45. public bool wasPressedThisFrame => m_FramePressState == PointerEventData.FramePressState.Pressed ||
  46. m_FramePressState == PointerEventData.FramePressState.PressedAndReleased;
  47. public void OnFrameFinished()
  48. {
  49. m_FramePressState = PointerEventData.FramePressState.NotChanged;
  50. }
  51. }
  52. }
  53. }
  54. #endif