126 lines
3.8 KiB
C#
126 lines
3.8 KiB
C#
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; }
|
|
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<Vector2>();
|
|
}
|
|
|
|
public void OnLook(InputAction.CallbackContext context)
|
|
{
|
|
LookInput = context.ReadValue<Vector2>();
|
|
}
|
|
|
|
public void OnScroll(InputAction.CallbackContext context)
|
|
{
|
|
ScrollInput = context.ReadValue<Vector2>();
|
|
}
|
|
|
|
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) OnCancelEvent?.Invoke();
|
|
}
|
|
}
|
|
}
|