using System; using Managers; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Users; using static InputActionMaps; namespace ShipHandling { public class ShipInputHandler : IDisposable, IPlayerActions { private readonly ShipState state; private readonly InputActionMaps inputActions = new(); public InputUser user; public ShipInputHandler(ShipState shipState, InputDevice device, string controlScheme) { state = shipState; user = InputUser.PerformPairingWithDevice(device); user.AssociateActionsWithUser(inputActions); user.ActivateControlScheme(controlScheme); inputActions.Player.SetCallbacks(this); inputActions.Player.Enable(); } public void OnThrust(InputAction.CallbackContext context) { state.thrustInput = context.ReadValue(); } public void OnSteer(InputAction.CallbackContext context) { state.steerInput = context.ReadValue(); } public void OnBoost(InputAction.CallbackContext context) { state.boostInput = context.ReadValue(); } public void OnReset(InputAction.CallbackContext context) { if (Debug.isDebugBuild) { state.reset = true; } } public void Dispose() { inputActions.Player.Disable(); inputActions.Player.RemoveCallbacks(this); user.UnpairDevicesAndRemoveUser(); } } }