using UnityEngine; using System; public class PlayerInput : MonoBehaviour { public static PlayerInput Instance { get; private set; } // Continuous axes public float MouseX { get; private set; } public float MouseY { get; private set; } public float Horizontal { get; private set; } public float Vertical { get; private set; } // Continuous states public bool Crouch { get; private set; } public bool Run { get; private set; } // Events for discrete actions public event Action OnToggleInventory; public event Action OnDropPressed; public event Action OnPickupPressed; public event Action OnJumpPressed; public event Action OnHotbarSelect; public bool Enabled { get; set; } = true; void Awake() { if (Instance == null) { Instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } void Update() { // Always allow toggle inventory (Tab/Escape) even when input is disabled if (Input.GetKeyDown(KeyCode.Tab) || Input.GetKeyDown(KeyCode.Escape)) OnToggleInventory?.Invoke(); if (!Enabled) return; // Axes MouseX = Input.GetAxis("Mouse X"); MouseY = Input.GetAxis("Mouse Y"); Horizontal = Input.GetAxisRaw("Horizontal"); Vertical = Input.GetAxisRaw("Vertical"); // Continuous keys Crouch = Input.GetKey(KeyCode.C); Run = Input.GetKey(KeyCode.LeftShift); // Discrete actions if (Input.GetButtonDown("Jump")) OnJumpPressed?.Invoke(); if (Input.GetKeyDown(KeyCode.Tab)) OnToggleInventory?.Invoke(); if (Input.GetKeyDown(KeyCode.Q)) OnDropPressed?.Invoke(); if (Input.GetKeyDown(KeyCode.E)) OnPickupPressed?.Invoke(); for (int i = 0; i < 9; i++) { if (Input.GetKeyDown(KeyCode.Alpha1 + i)) { OnHotbarSelect?.Invoke(i); } } } }