using System; using UnityEngine; using UnityEngine.InputSystem; namespace OnlyScove.Scripts { public class InputReader : MonoBehaviour { [SerializeField] private InputActionAsset inputActions; public InputActionAsset InputActions => inputActions; // Continuous Inputs public virtual Vector2 MoveInput { get; protected set; } public virtual Vector2 LookInput { get; protected set; } public virtual Vector2 ScrollInput { get; protected set; } public virtual bool IsSprintHeld { get; protected set; } public virtual bool IsAttackHeld { get; protected set; } public void ApplyNetworkInput(Vector2 move, bool isSprint) { MoveInput = move; IsSprintHeld = isSprint; } // One-shot Events public event Action OnJumpEvent; public event Action OnDodgeEvent; public event Action OnSprintEvent; public event Action OnAttackEvent; public event Action OnCrouchEvent; public event Action OnInteractEvent; public event Action OnNextInteractEvent; public event Action OnPreviousInteractEvent; public event Action OnToggleViewEvent; // UI Events public event Action OnToggleSettingsEvent; // Cho Ctrl+O public event Action OnCancelEvent; // Cho phím ESC hoặc phím đóng UI public void OnAttack(InputAction.CallbackContext context) { if (context.performed) { OnAttackEvent?.Invoke(); IsAttackHeld = true; } if (context.canceled) { IsAttackHeld = false; } } public void OnMove(InputAction.CallbackContext context) { MoveInput = context.ReadValue(); } public void OnLook(InputAction.CallbackContext context) { LookInput = context.ReadValue(); } public void OnScroll(InputAction.CallbackContext context) { ScrollInput = context.ReadValue(); } public void OnSprint(InputAction.CallbackContext context) { if (context.performed) { IsSprintHeld = true; OnSprintEvent?.Invoke(); } if (context.canceled) IsSprintHeld = false; } public void OnToggleView(InputAction.CallbackContext context) { if (context.performed) OnToggleViewEvent?.Invoke(); } public void OnJump(InputAction.CallbackContext context) { if (context.performed) OnJumpEvent?.Invoke(); } public void OnDodgeOrThrust(InputAction.CallbackContext context) { if (context.performed) OnDodgeEvent?.Invoke(); } public void OnCrouch(InputAction.CallbackContext context) { if (context.performed) OnCrouchEvent?.Invoke(); } public void OnInteract(InputAction.CallbackContext context) { if (context.performed) OnInteractEvent?.Invoke(); } public void OnNext(InputAction.CallbackContext context) { if (context.performed) OnNextInteractEvent?.Invoke(); } public void OnPrevious(InputAction.CallbackContext context) { if (context.performed) OnPreviousInteractEvent?.Invoke(); } // UI Callbacks public void OnToggleSettings(InputAction.CallbackContext context) { if (context.performed) { Debug.Log("[InputReader] Toggle Settings Action Performed!"); OnToggleSettingsEvent?.Invoke(); } } public void OnCancel(InputAction.CallbackContext context) { if (context.performed) { Debug.Log("[InputReader] Cancel Action Performed (ESC)!"); OnCancelEvent?.Invoke(); } } } }