using UnityEngine; using UnityEngine.InputSystem; namespace BlueWater { public enum InputActionMaps { None = 0, Tycoon, TycoonUi, Combat, CombatUi, } public class PlayerInputKeyManager : Singleton { [SerializeField] private PlayerInput _currentPlayerInput; private string _previousInputActionMaps; private InputActionMap _previousInputActionMap; /// /// 현재 실행되고 있는 PlayerInput을 관리할 수 있게 /// PlayerInput 컴포넌트를 받아와서 사용하는 경우에 필수로 호출 /// /// public void SetCurrentPlayerInput(PlayerInput playerInput) => _currentPlayerInput = playerInput; private bool IsNullCurrentPlayerInput() { if (_currentPlayerInput) return false; Debug.Log("CurrentPlayerInput가 할당되지 않았습니다."); return true; } public void SwitchCurrentActionMap(string inputActionMaps) { if (IsNullCurrentPlayerInput()) return; _previousInputActionMaps = _currentPlayerInput.currentActionMap.name; _currentPlayerInput.SwitchCurrentActionMap(inputActionMaps); } public void SwitchCurrentActionMap(InputActionMaps inputActionMaps) { if (IsNullCurrentPlayerInput()) return; _previousInputActionMaps = _currentPlayerInput.currentActionMap.name; _currentPlayerInput.SwitchCurrentActionMap(inputActionMaps.ToString()); } public void SwitchPreviousActionMap() { if (IsNullCurrentPlayerInput()) return; if (string.IsNullOrEmpty(_previousInputActionMaps)) { Debug.Log("저장된 _previousInputActionMaps값이 없습니다."); return; } _currentPlayerInput.SwitchCurrentActionMap(_previousInputActionMaps); _previousInputActionMaps = null; } public InputActionMap GetCurrentInputActionMap() { if (IsNullCurrentPlayerInput()) return null; return _currentPlayerInput.currentActionMap; } public void EnableCurrentPlayerInput() { if (IsNullCurrentPlayerInput()) return; _currentPlayerInput.enabled = true; } public void DisableCurrentPlayerInput() { if (IsNullCurrentPlayerInput()) return; _currentPlayerInput.enabled = false; } public void DisableAllActionMaps() { if (IsNullCurrentPlayerInput()) return; foreach (var element in _currentPlayerInput.actions.actionMaps) { element.Disable(); } } public void DisableAllActionsExcept(string exceptActionName) { if (IsNullCurrentPlayerInput()) return; var exceptAction = _currentPlayerInput.currentActionMap.FindAction(exceptActionName); foreach (var action in _currentPlayerInput.currentActionMap.actions) { if (action != exceptAction) { action.Disable(); } else { action.Enable(); } } } public void EnableAllActions() { if (IsNullCurrentPlayerInput()) return; foreach (var action in _currentPlayerInput.actions) { action.Enable(); } } } }