using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class PlayerInputHandler : MonoBehaviour { [SerializeField] private PlayerInputSettings _inputSettings; public class PlayerInputState { public BufferedInput Jump; public BufferedInput Blink; public BufferedInput Use; public CameraRelativeInput Move; public Vector2 Look; public float MoveRotation; public PlayerInputState( float jumpBuffer, float blinkBuffer, float useBuffer ) { Jump = new BufferedInput( jumpBuffer ); Blink = new BufferedInput( blinkBuffer ); Use = new BufferedInput( useBuffer ); Move = new CameraRelativeInput(); Look = Vector2.zero; } public void Update( float deltaTime ) { Jump.Update(deltaTime); Blink.Update(deltaTime); Use.Update(deltaTime); } } public PlayerInputState InputState => _state; private PlayerInputState _state; private void Awake() { _state = new PlayerInputState( _inputSettings.JumpBufferTime, _inputSettings.BlinkBufferTime, _inputSettings.UseBufferTime ); } private void FixedUpdate() { _state.Update( Time.fixedDeltaTime ); } 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 Blink( InputAction.CallbackContext context ) => _state.Blink.Set( context.ReadValueAsButton() ); public void Jump( InputAction.CallbackContext context ) => _state.Jump.Set( context.ReadValueAsButton() ); public void Use( InputAction.CallbackContext context ) => _state.Use.Set( context.ReadValueAsButton() ); }