using UnityEngine; using UnityEngine.InputSystem; namespace Code.Input { public class InputService : IInputService { private readonly InputActionAsset _inputActionAsset; private InputAction _lmbInteractAction; public Vector2 MainMenuParalax { get; private set; } public Vector2 LookInput { get; private set; } public Vector2 MoveInput { get; private set; } public bool JumpPressed { get; private set; } public bool SprintHeld { get; private set; } public bool AttackPressed { get; private set; } public InputService(InputActionAsset inputActionAsset) { _inputActionAsset = inputActionAsset; SetupInputCallbacks(); } private void SetupInputCallbacks() { SetupMainMenuInputCallbacks(); SetupGameplayInputCallbacks(); } private void SetupGameplayInputCallbacks() { var map = _inputActionAsset.actionMaps[(int)ActionMapping.Gameplay]; BindVector2(map, "Move", v => MoveInput = v); BindButton(map, "Jump", v => JumpPressed = v); BindButton(map, "Sprint", v => SprintHeld = v); BindButton(map, "Attack", v => AttackPressed = v); } private void SetupMainMenuInputCallbacks() { var map = _inputActionAsset.actionMaps[(int)ActionMapping.MainMenu]; BindVector2(map, "Parallax", v => MainMenuParalax = v); } private void BindButton(InputActionMap map, string actionName, System.Action setter) { var action = map.FindAction(actionName); if (action == null) return; action.performed += _ => setter(true); action.canceled += _ => setter(false); } private void BindVector2(InputActionMap map, string actionName, System.Action setter) { var action = map.FindAction(actionName); if (action == null) return; action.performed += ctx => setter(ctx.ReadValue()); action.canceled += _ => setter(Vector2.zero); } private void BindAxis(InputActionMap map, string actionName, System.Action setter) { var action = map.FindAction(actionName); if (action == null) return; action.performed += ctx => setter(ctx.ReadValue()); action.canceled += _ => setter(0f); } public void EnableMap(ActionMapping actionMap) { _inputActionAsset.actionMaps[(int)actionMap].Enable(); } public void DisableMap(ActionMapping actionMap) { _inputActionAsset.actionMaps[(int)actionMap].Disable(); } public void DebugBindAction(int mapId, int actionId, System.Action action) => _inputActionAsset.actionMaps[mapId].actions[actionId].performed += action; public void DebugUnbindAction(int mapId, int actionId, System.Action action) => _inputActionAsset.actionMaps[mapId].actions[actionId].performed -= action; } }