using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; using Ktyl.Util; public class PlayerInputHandler : MonoBehaviour { //to get the artifact id you are near to [SerializeField] private SerialInt _nearbyArtefactID; [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) { if(context.started) EventHandler.current.ArtefactPickUp(_nearbyArtefactID.Value); } }