using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class PlayerInputHandler : MonoBehaviour { [SerializeField] private PlayerInputSettings _inputSettings; public struct PlayerInputState { public BufferedInput Jump; public BufferedInput Use; public CameraRelativeInput Move; public Vector2 Look; public float MoveRotation; } public PlayerInputState InputState => _state; private PlayerInputState _state; private void Awake() { _state = new PlayerInputState(); _state.Jump = new BufferedInput( _inputSettings.JumpBufferTime ); _state.Use = new BufferedInput( _inputSettings.UseBufferTime ); _state.Move = new CameraRelativeInput(); _state.Look = Vector2.zero; } private void FixedUpdate() { float deltaTime = Time.fixedDeltaTime; _state.Jump.Update( deltaTime ); _state.Use.Update( deltaTime ); } public void SetCameraRotation( float angle ) => _state.Move.SetAngle( angle ); public void Look( InputAction.CallbackContext context ) => _state.Look = context.ReadValue(); public void Move( InputAction.CallbackContext context ) => _state.Move.SetValue( context.ReadValue() ); public void Jump( InputAction.CallbackContext context ) => _state.Jump.Set( context.ReadValue() > 0.5f ); public void Use( InputAction.CallbackContext context ) => _state.Use.Set( context.ReadValue() > 0.5f ); }