using System; using UnityEngine; using UnityEngine.InputSystem; namespace OnlyScove.Scripts { public class InputReader : MonoBehaviour { // 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; } // Left Shift public virtual bool IsAttackHeld { get; protected set; } // Left Mouse Button // THÊM HÀM NÀY ĐỂ ĐỒNG BỘ MẠNG public void ApplyNetworkInput(Vector2 move, bool isSprint) { MoveInput = move; IsSprintHeld = isSprint; } // One-shot Events public event Action OnJumpEvent; // Space public event Action OnDodgeEvent; // Right Mouse Button (RMB) public event Action OnSprintEvent; // Left Shift public event Action OnAttackEvent; // Left Mouse Button (LMB) public event Action OnCrouchEvent; // C Key public event Action OnInteractEvent; // E Key public event Action OnNextInteractEvent; // R Key public event Action OnPreviousInteractEvent; // Q Key public event Action OnToggleViewEvent; // F2 - New event for toggling camera view 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; } // New method for ToggleView input 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) { Debug.Log($"[InputReader] Interaction State: {context.phase} | Started: {context.started} | Performed: {context.performed} | Canceled: {context.canceled}"); if (context.performed) { Debug.Log("[InputReader] Event OnInteractEvent triggered!"); OnInteractEvent?.Invoke(); } } public void OnNext(InputAction.CallbackContext context) { if (context.performed) OnNextInteractEvent?.Invoke(); } public void OnPrevious(InputAction.CallbackContext context) { if (context.performed) OnPreviousInteractEvent?.Invoke(); } } }