revival/game/Assets/Scripts/Player/PlayerInputHandler.cs

73 lines
2.1 KiB
C#

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<Vector2>();
public void Move( InputAction.CallbackContext context )
=> _state.Move.SetValue( context.ReadValue<Vector2>() );
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() );
}