using System; using Managers; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Users; using static InputActionMaps; namespace ShipHandling { public class ShipInputHandler : IDisposable, IPlayerActions { private ShipState state; private readonly InputActionMaps inputActions = new(); private readonly string controlScheme; private readonly InputDevice device; public InputUser user; public ShipInputHandler(ShipState shipState, InputDevice device, string controlScheme) { state = shipState; this.controlScheme = controlScheme; this.device = device; user = InputUser.PerformPairingWithDevice(device); user.AssociateActionsWithUser(inputActions); user.ActivateControlScheme(controlScheme); inputActions.Player.SetCallbacks(this); inputActions.Player.Enable(); } public void ReActivateInput(Ship ship) { // user = InputUser.PerformPairingWithDevice(device); // user.AssociateActionsWithUser(inputActions); // user.ActivateControlScheme(controlScheme); this.state = ship.state; 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 Dispose() { inputActions.Player.Disable(); inputActions.Player.RemoveCallbacks(this); user.UnpairDevicesAndRemoveUser(); } } }