NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Framework/Input/InputManager.cs

1 line
7.6 KiB
C#
Raw Normal View History

using Framework; using PhxhSDK; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.EnhancedTouch; using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch; public class InputManager : SingletonMono<InputManager> { public delegate void OnFingerMoveEvent(Vector2 delta); public delegate void OnFingerUpEvent(Vector2 screenPosition); public delegate void OnFingersMoveEvent(float delta); public OnFingerMoveEvent OnFingerMove; public OnFingerMoveEvent OnFingerMoveUI; public OnFingerUpEvent OnFingerUp; public OnFingerUpEvent OnClick; public OnFingersMoveEvent OnFingersMove; private bool handledThisFrame; private bool isOverUI = false; # if UNITY_STANDALONE || UNITY_EDITOR private float moveDelta = 2f; private bool isMousePressedLastFrame; private bool isMouseMovedSincePressed; private Vector2 lastMousePosition; private ButtonControl mouseButtonAsFinger; private bool isMosuePressUI; #endif private void OnEnable() { EnhancedTouchSupport.Enable(); Touch.onFingerMove += _OnFingerMove; Touch.onFingerUp += _OnFingerUp; # if UNITY_STANDALONE || UNITY_EDITOR mouseButtonAsFinger = Mouse.current.leftButton; #endif } private void OnDisable() { Touch.onFingerMove -= _OnFingerMove; Touch.onFingerUp -= _OnFingerUp; EnhancedTouchSupport.Disable(); } private void Update() { isOverUI = IsPointerOverUI(); //CheckIsBackKeyDown(); # if UNITY_STANDALONE || UNITY_EDITOR if (IsPointerOverUI() && mouseButtonAsFinger.isPressed && !isMousePressedLastFrame) { isMosuePressUI = true; } if (!IsPointerOverUI() && !mouseButtonAsFinger.isPressed) { isMosuePressUI = false; } var currentMouse = Mouse.current; if (isMousePressedLastFrame && mouseButtonAsFinger.isPressed) { var delta = currentMouse.position.ReadValue() - lastMousePosition; isMouseMovedSincePressed |= delta.sqrMagnitude > float.Epsilon; if (IsPointerOverUI() || isMosuePressUI) { OnFingerMoveUI?.Invoke(delta); } else { OnFingerMove?.Invoke(delta); } } if (!IsPointerOverUI() && !isMosuePressUI) { if (isMousePressedLastFrame && !mouseButtonAsFinger.isPressed) { if (!isMouseMovedSincePressed) { OnClick?.Invoke(currentMouse.position.ReadValue()); } OnFingerUp?.Invoke(currentMouse.position.ReadValue()); isMouseMovedSincePressed = false; } } // cache mouse state for next frame isMousePressedLastFrame = mouseButtonAsFinger.isPressed; if (isMousePressedLastFrame) { lastMousePosition = currentMouse.position.ReadValue(); } if (Mouse.current.scroll.ReadValue().y != 0) { OnFingersMove?.Invoke(Mouse.current.scroll.ReadValue().y); } if (Keyboard.current.aKey.isPressed) { OnFingerMove?.Invoke(new Vector2(moveDelta, 0)); } if (Keyboard.current.dKey.isPressed) { OnFingerMove?.Invoke(new Vector2(-moveDelta, 0)); } if (Keyboard.current.wKey.isPressed) { OnFingerMove?.Invoke(new Vector2(0, -moveDelta)); } if (Keyboard.current.sKey.isPressed) { OnFingerMove?.Invoke(new Vector2(0, moveDelta)); } #endif } private void LateUpdate() { handledThisFrame = false; } # if UNITY_STANDALONE || UNITY_EDITOR public bool IsLeftButton(int buttonIndex) { return buttonIndex == 1; } public bool IsRightButton(int buttonIndex) {